我希望我的問題不會聽起來很蠢,但我想知道什麼是這兩條線之間的區別:的Java:ArrayList的初始化(2碼線之間的差值)
(假設我犯了一個名爲類牛..)
ArrayList<Cow> c1 = new ArrayList<Cow>();
ArrayList<Cow> c2 = new ArrayList();
在此先感謝您的解釋。
我希望我的問題不會聽起來很蠢,但我想知道什麼是這兩條線之間的區別:的Java:ArrayList的初始化(2碼線之間的差值)
(假設我犯了一個名爲類牛..)
ArrayList<Cow> c1 = new ArrayList<Cow>();
ArrayList<Cow> c2 = new ArrayList();
在此先感謝您的解釋。
目前,基本上沒有區別,由於type erasure。第一種形式是優選的;第二種形式使用了原始類型,並且僅支持與舊版本的Java向後兼容性。一個好的編譯器會給你警告,如果你使用它。
作爲the Java Language Specification, Third Edition, §4.8說明:
使用原始類型被允許僅作爲讓步的遺留代碼兼容。強烈建議在將通用性引入到Java編程語言後編寫的代碼中使用原始類型。 未來版本的Java編程語言可能會禁止使用原始類型。
(強調原文)。
HM得到它!所以你說這個列表本身基本上是一樣的,很好的解釋隊友:) – Popokoko 2012-02-29 15:16:41
作爲ruakh剛纔指出,第一種是優選的,並且實際上不會有任何差別duriong執行。
解釋在簡單的話: 在兩條線您聲明牛 列表中你牛列表初始化它的第一行。 在你使用對象列表初始化它第二個(和牛是對象的子類)。
將它更好地聲明爲列表界面列表。
List<Cow> listOfCows = new ArrayList<Cow>();
嘗試使用javac -Xlint選項編譯代碼並查看編譯器對此有何評論。 – Andy 2012-02-29 15:10:54
您將獲得日食這些惱人的警告(例如)如果你使用第二個選項:) – Jerome 2012-02-29 15:12:36
葉發生什麼事了,甚至通過使用javac沒有第二屬性你剛剛給它指出的東西,以及反正我不那麼在意技術細節我只是想知道,如果列表本身在某種程度上是不同的... – Popokoko 2012-02-29 15:15:04