为什么双括号初始化要求SerialVersionUID? [英] Why does double brace initialization asks for SerialVersionUID?

查看:137
本文介绍了为什么双括号初始化要求SerialVersionUID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public static List<Long> abc = new ArrayList<Long>(){{ //Asks for SerialVersionUID
        abc.add(5L);
        abc.add(7L);
    }};

public static List<Long> abc = new ArrayList<Long>();//Does not need SerialVersionUID
    static{
        abc.add(5L);
        abc.add(7L);
    }


推荐答案

在第二个例子中,你'实例化已经定义了 serialVersionUID 的类(即 ArrayList )。

In the second example, you're instantiating a class that already has a defined serialVersionUID (i.e. ArrayList).

在第一个例子中,你要定义一个 ArrayList 的匿名子类,你的子类需要有它的拥有 serialVersionUID 已定义。双括号初始化实际上定义了一个匿名类并不总是很明显。

In the first example, you're defining an anonymous subclass of ArrayList, and your subclass needs to have its own serialVersionUID defined. It's not always obvious that double-brace initialization actually defines an anonymous class.

这篇关于为什么双括号初始化要求SerialVersionUID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆