为什么双括号初始化要求SerialVersionUID?
public static List abc = new ArrayList(){{ //Asks for SerialVersionUID abc.add(5L); abc.add(7L); }}; public static List abc = new ArrayList();//Does not need SerialVersionUID static{ abc.add(5L); abc.add(7L); }
在第二个示例中,您将实例化一个已经定义了serialVersionUID
(即ArrayList
)。
在第一个示例中,您将定义ArrayList
的匿名子类,并且您的子类需要定义自己的serialVersionUID
。 双括号初始化实际上定义了一个匿名类并不总是显而易见的。
因为在您的第一个示例中,您通过“双括号初始化”创建了ArrayList的匿名子类,并且ArrayList实现了Serializable接口。 SerialVersionUID用于反序列化,提供一个是很好的做法,尽管不是绝对必要的。 您的IDE可能配置为报告这些警告。
在第二个示例中,您没有创建ArrayList的匿名子类,只是实例化一个并调用其方法。