[英]What is the difference between ArrayList<?>, ArrayList, ArrayList<Object>?
[英]Difference between ArrayList<>() and ArrayList<>(){}
两者之间有什么区别。 后者为什么创建一个新的可序列化类?
new ArrayList<Clazz>()
创建一个新的空ArrayList
new ArrayList<Clazz>(){}
Eclipse显示: The serializable class does not declare a static final serialVersionUID field of type long
在第一个示例中,您将创建一个ArrayList
实例。 在后者中,您将创建ArrayList
的匿名子类的实例。 通常,您将覆盖子类中的一个或多个方法,
否则创建此类就没有多大意义。
正如John Skeet所指出的那样,创建一个泛型类型的匿名子类有一个不充分的理由,请参见他的回答 。
Eclipse警告说,为了遵守Serializable
规范( ArrayList
是Serializable
,因此它的所有子类也是如此),您应该在子类中定义一个唯一的serialVersionUID
,反序列化过程可以确保该子类的反序列化过程可以确保类定义没有明显改变由于已将其序列化(很明显==,您自己已决定新定义与旧定义不兼容,因此您可以通过更改serialVersionUID
来表达这一事实)。 如果您永远不会序列化列表,则警告无关紧要。
正如Joonas所说,在第二个示例中,您正在创建一个匿名内部类。 然而,还有一个原因是 ,即使你不覆盖任何方法等,以做到这一点:它可以让你确定的元素类型ArrayList
在执行时-因为匿名内部类的超类ArrayList<Clazz>
,而不是只是ArrayList
。
这就是类型文字在Guice中的工作方式。 这有点丑陋,但是可以完成工作...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.