8 回答

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
由于java的泛型在運(yùn)行時會擦除,所以本該有泛型類型參數(shù)的類或方法在初始化時可以省略,但這樣雖然沒有error卻會有warning,所以最好加上,懶的話可以用java7以后的diamond語法new HashMap<>()

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊
可以的,但是編譯器會提示警告。
jdk 1.5 以前集合是沒有泛型概念的,所以當(dāng)時的類型約束純粹自己寫,然后強(qiáng)轉(zhuǎn)。如下:
// 忽略添加map的部分.
Map map = new HashMap();
for(object obj : map){
if(obj instanceof String){
String str = (String) obj;
Sysout(str);
}
}
其實目前的java泛型還是用的這部分代碼,只不過不用你寫了,而是由編譯器偷偷的在編譯前替換一下再編譯。
不相信可以寫個泛型代碼,編譯之后在反編譯,你就看得到了。
之所以這么做就是為了兼容以前不寫泛型的代碼,讓他們也還可以正常運(yùn)行。

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊
Java1.5之后才支持泛型,所以為了兼容以前的老代碼,Java泛型是通過類型擦除來實現(xiàn)的,所以像
new HashMap();
這樣的寫法是可以通過編譯的。
但是這樣是類型不安全的,不推薦這樣的寫法,還是應(yīng)該使用泛型,帶上類型參數(shù)。

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊
當(dāng)前可以,泛型只是為了約束key|value類型,增加可讀性,
java集合key|value可以使任何非基本數(shù)據(jù)類型的對象,所以不加也沒啥關(guān)系

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
鉆石語法(屬于Coin項目),這是Java7的一項改進(jìn),減少處理泛型時敲鍵盤的次數(shù)。
7以前: Map<String, User> map = new HashMap<String, User>();
7以后: Map<String, User> map = new HashMap<>();
編譯器會推斷出后面的泛型。
添加回答
舉報