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);
}
2
A
回答
5
在第二个示例中,您正在实例化一个已定义为serialVersionUID
(即ArrayList
)的类。
在第一个示例中,您定义了一个匿名的子类ArrayList
,并且您的子类需要定义自己的serialVersionUID
。双括号初始化实际上定义了一个匿名类并不总是显而易见的。
3
因为在第一个例子中,你通过“double-brace initialization”创建了ArrayList的匿名子类,并且ArrayList实现了Serializable接口。 SerialVersionUID用于反序列化,尽管不是绝对必要的,但提供一个是很好的做法。您的IDE可能配置为报告这些警告。
在你的第二个例子中,你并没有创建一个ArrayList的匿名子类,只是实例化一个并调用它的方法。
相关问题
- 1. 双括号初始化
- 2. 初始化C-struct的双花括号的含义是什么?
- 3. 双括号初始化类型混淆
- 4. 为什么建议统一初始化(使用大括号初始化)?
- 5. 为什么我的serialVersionUID后需要一个大括号?
- 6. 阵列初始化需要大括号
- 7. 括号初始化与括号问题
- 8. 初始化映射时为什么不能省略大括号?
- 9. 为什么C++初始化列表在大括号之前?
- 10. 为什么初始化这个结构时需要更多花括号?
- 11. 双括弧初始化和系列化
- 12. 为什么我需要初始化?
- 13. 为什么字符串需要用初始值初始化?
- 14. 双括弧初始化在java中
- 15. 数组初始化需要一个大括号初始化列表lambda
- 16. 为什么初始化
- 17. 双括号初始化与嵌套集合
- 18. 使用双曲花括号初始化矢量<string>
- 19. Python:双括号做什么?
- 20. iPhone - ZipArchive上的双括号...为什么?
- 21. 初始化字符串用双引号
- 22. 初始化列表后的大括号
- 23. 大括号或相等的初始化
- 24. 缺少括号围绕初始化
- 25. 为什么用逗号进行双重初始化是非法的?
- 26. 为什么在初始化空向量时圆括号有所作用?
- 27. 为什么我们有时在初始化时不使用括号?
- 28. 在数组初始化中混合圆括号和方括号
- 29. 为什么不初始化std :: vector <T>初始化T?
- 30. 为什么使用大括号初始化一些哈希值,还有一些使用括号?
这将回答你的问题,它是相同的http://stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization – valli 2009-12-18 06:26:36
ack!在这两个例子中,你正在创建一个公共静态*可修改*列表 - 非常糟糕。 – 2009-12-18 08:00:01
@Kevin在你创建一个公共静态可修改列表的例子中,你是什么意思。什么是替代方案? – DKSRathore 2009-12-18 11:59:28