據我所知,泛型僅在編譯時有用。自Java5 +鑽石操作員開始泛型集合的方法
因此,可以聲明:
private Set set = new HashSet<String>();
,然後在這個字符串HashSet的,狗或任何添加到組,沒有任何問題,因爲沒有在像陣列運行任何檢查( ArrayStoreException信息...)(但你可能當您使用集有一個像classcast問題...
所以,我想說的是,我們通常實例化泛型集合那樣:
Set<String> set = new HashSet<String>();
我的問題是,爲什麼我們把HashSet的類型,因爲只有變量的引用類型是非常重要的(我認爲)。
我的意思是,我們可以簡單的寫:
Set<String> set = new HashSet();
而且它的工作完全一樣的吧? 那麼,爲什麼我們通常在實例化過程中寫入類型呢? (這不是強制性的)
編輯
我知道「鑽石經營者」的類型推斷,但是爲什麼我們甚至需要它!因爲類型推斷已經在工作了!
以下代碼:
Set<String> set = new HashSet();
set.add("Test add a string 1");
set.add("Test add a string 2");
for (String s : set) {
System.out.println(s);
}
產生輸出:
測試添加字符串1 測試添加字符串2
測試它自己 http://ideone.com/vuiCE
所以,現在你說說類型推斷作爲Java7的功能,但它已經爲我工作...
隨着java7我將不得不更換我的
Set<String> set = new HashSet();
通過
Set<String> set = new HashSet<>();
對於做同樣的事情,它還有2個額外的字符嗎? (?除非仿製藥不僅與Java7編譯的時候我不知道)
在Java 7的這個方向取得一些進展:http://download.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html。 – rodrigoap