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);
}
答案 0 :(得分:5)
在第二个示例中,您将实例化一个已定义serialVersionUID
的类(即ArrayList
)。
在第一个示例中,您要定义ArrayList
的匿名子类,并且您的子类需要定义自己的serialVersionUID
。双括号初始化实际上定义了一个匿名类并不总是很明显。
答案 1 :(得分:3)
因为在您的第一个示例中,您通过“双括号初始化”创建了ArrayList的匿名子类,并且ArrayList实现了Serializable接口。 SerialVersionUID用于反序列化,提供一个虽然不是绝对必要,但它是一个很好的做法。您的IDE可能已配置为报告这些警告。
在你的第二个例子中,你没有创建一个ArrayList的匿名子类,只是实例化一个并调用它的方法。