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

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

Java 7中的菱形運算符(<>)有什么意義?

Java 7中的菱形運算符(<>)有什么意義?

Java 7中的菱形運算符(<>)有什么意義?java 7中的菱形運算符允許以下代碼:List<String> list = new LinkedList<>();但是在Java 5/6中,我可以簡單地寫:List<String> list = new LinkedList();我對類型擦除的理解是這些完全相同。(無論如何,通用都會在運行時刪除)。為什么要鉆石頭呢?它允許哪些新功能/類型安全?如果它沒有產(chǎn)生任何新功能,為什么他們將其作為功能提及?我對這個概念的理解是否有缺陷?
查看完整描述

4 回答

?
夢里花落0921

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

這個問題

List<String> list = new LinkedList();

在左側(cè),您使用的是泛型類型List<String>,在右側(cè),您使用的是原始類型LinkedList。Java中的原始類型實際上僅存在與前泛型代碼的兼容性,并且除非絕對必須,否則不應(yīng)在新代碼中使用。

現(xiàn)在,如果Java從一開始就具有泛型并且沒有類型,例如LinkedList,最初在它具有泛型之前創(chuàng)建的類型,它可能已經(jīng)使得它使得泛型類型的構(gòu)造函數(shù)自動從左側(cè)推斷其類型參數(shù) - 如果可能的話,指派的一面。但事實并非如此,它必須以不同的方式處理原始類型和泛型類型以實現(xiàn)向后兼容性。這使得他們需要制作一種稍微不同但同樣方便的方式來聲明一個通用對象的新實例,而不必重復(fù)其類型參數(shù)......菱形運算符。

就您的原始示例而言List<String> list = new LinkedList(),編譯器會為該分配生成警告,因為它必須??紤]一下:

List<String> strings = ... // some list that contains some strings
// Totally legal since you used the raw type and lost all type checking!List<Integer> integers = new LinkedList(strings);

存在泛型以提供編譯時保護(hù)以防止做錯事。在上面的示例中,使用原始類型意味著您沒有獲得此保護(hù),并且將在運行時收到錯誤。這就是你不應(yīng)該使用原始類型的原因。

// Not legal since the right side is actually generic!List<Integer> integers = new LinkedList<>(strings);

但是,菱形運算符允許將賦值的右側(cè)定義為具有與左側(cè)相同類型參數(shù)的真正通用實例,而無需再次鍵入這些參數(shù)。它允許您使用與原始類型幾乎相同的努力來保持泛型的安全性。

我認(rèn)為要理解的關(guān)鍵是原始類型(沒有<>)不能被視為泛型類型。聲明原始類型時,您不會獲得泛型的任何好處和類型檢查。您還必須記住,泛型是Java語言的通用部分 ......它們不僅僅適用于Collections 的無參數(shù)構(gòu)造函數(shù)!


查看完整回答
反對 回復(fù) 2019-05-29
?
翻翻過去那場雪

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

你的理解有點缺陷。鉆石操作員是一個很好的功能,因為你不必重復(fù)自己。在聲明類型時定義類型一次是有意義的,但在右側(cè)再次定義它是沒有意義的。DRY原則。

現(xiàn)在解釋有關(guān)定義類型的所有模糊。你是正確的,在運行時刪除了類型,但是一旦你想要從具有類型定義的List中檢索某些內(nèi)容,你就會將它作為你在聲明列表時定義的類型返回,否則它會丟失所有特定的功能并且只有對象功能,除非您將檢索到的對象強制轉(zhuǎn)換為原始類型,這有時會非常棘手并導(dǎo)致ClassCastException。

使用List<String> list = new LinkedList()將獲得rawtype警告。


查看完整回答
反對 回復(fù) 2019-05-29
  • 4 回答
  • 0 關(guān)注
  • 2548 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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