第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java: new一個map時,可以不加泛型標(biāo)志<x,y>嗎?

Java: new一個map時,可以不加泛型標(biāo)志<x,y>嗎?

慕慕森 2019-02-19 12:48:32
我看到這么一句 private static Map<String, User> instance = Collections.synchronizedMap(new HashMap()); 其中new HashMap()沒有寫成 new HashMap<String, User>()這是為何?
查看完整描述

8 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊

JDK7的新特性,會自動推斷泛型。


更新:不好意思,沒有嘗試,不是自動推斷,這么寫會有提示。。

查看完整回答
反對 回復(fù) 2019-03-01
?
BIG陽

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

由于java的泛型在運(yùn)行時會擦除,所以本該有泛型類型參數(shù)的類或方法在初始化時可以省略,但這樣雖然沒有error卻會有warning,所以最好加上,懶的話可以用java7以后的diamond語法new HashMap<>()

查看完整回答
反對 回復(fù) 2019-03-01
?
小怪獸愛吃肉

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)行。

查看完整回答
反對 回復(fù) 2019-03-01
?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗 獲得超3個贊

Java1.5之后才支持泛型,所以為了兼容以前的老代碼,Java泛型是通過類型擦除來實現(xiàn)的,所以像

new HashMap();

這樣的寫法是可以通過編譯的。
但是這樣是類型不安全的,不推薦這樣的寫法,還是應(yīng)該使用泛型,帶上類型參數(shù)。

查看完整回答
反對 回復(fù) 2019-03-01
?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊

可以,沒毛病

查看完整回答
反對 回復(fù) 2019-03-01
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊

當(dāng)前可以,泛型只是為了約束key|value類型,增加可讀性,
java集合key|value可以使任何非基本數(shù)據(jù)類型的對象,所以不加也沒啥關(guān)系

查看完整回答
反對 回復(fù) 2019-03-01
?
慕萊塢森

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<>();

編譯器會推斷出后面的泛型。
查看完整回答
反對 回復(fù) 2019-03-01
  • 8 回答
  • 0 關(guān)注
  • 3343 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號