![](/img/trans.png)
[英]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.