大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 秒懂,深入學習java泛型使用

秒懂,深入學習java泛型使用

更新時間:2020-05-07 14:41:56 來源:動力節點 瀏覽2357次

    泛型是JDK5引入的概念,泛型的引入主要是為了保證java中類型的安全性,有點像C++中的模板。

    但是Java為了保證向下兼容性,它的泛型全部都是在編譯期間實現的。編譯器執行類型檢查和類型推斷,然后生成普通的非泛型的字節碼。這種就叫做類型擦除。編譯器在編譯的過程中執行類型檢查來保證類型安全,但是在隨后的字節碼生成之前將其擦除。

    這樣就會帶來讓人困惑的結果。本文將會詳細講解泛型在java中的使用,以避免進入誤區。

    泛型和協變

    有關協變和逆變的詳細說明可以參考:

    深入理解協變和逆變

    這里我再總結一下,協變和逆變只有在類型聲明中的類型參數里才有意義,對參數化的方法沒有意義,因為該標記影響的是子類繼承行為,而方法沒有子類。

    當然java中沒有顯示的表示參數類型是協變還是逆變。

    協變意思是如果有兩個類A<T>和A<C>,其中C是T的子類,那么我們可以用A<C>來替代A<T>。

    逆變就是相反的關系。

    Java中數組就是協變的,比如Integer是Number的子類,那么Integer[]也是Number[]的子類,我們可以在需要Number[]的時候傳入Integer[]。

    接下來我們考慮泛型的情況,List<Number>是不是List<Integer>的父類呢?很遺憾,并不是。

    我們得出這樣一個結論:泛型不是協變的。

    為什么呢?我們舉個例子:

    List<Integer>integerList=newArrayList<>();

    List<Number>numberList=integerList;//compileerror

    numberList.add(newFloat(1.111));

    假如integerList可以賦值給numberList,那么numberList可以添加任意Number類型,比如Float,這樣就違背了泛型的初衷,向Integerlist中添加了Float。所以上面的操作是不被允許的。

    剛剛我們講到Array是協變的,如果在Array中帶入泛型,則會發生編譯錯誤。比如newList<String>[10]是不合法的,但是newList<?>[10]是可以的。因為在泛型中?表示的是未知類型。

    List<?>[]list1=newList<?>[10];

    List<String>[]list2=newList<String>[10];//compileerror

    泛型在使用中會遇到的問題

    因為類型擦除的原因,List<String>和List<Integer>在運行是都會被當做成為List。所以我們在使用泛型時候的一些操作會遇到問題。

    假如我們有一個泛型的類,類中有一個方法,方法的參數是泛型,我們想在這個方法中對泛型參數進行一個拷貝操作。

秒懂,深入學習java泛型使用

    可以看到?是不能直接用于實例化的。但是我們可以用下面的兩種方式代替。

    再看看Array的使用:

秒懂,深入學習java泛型使用

    同樣的,T是不能直接用于實例化的,但是我們可以用下面兩種方式代替。

    類型擦除要注意的事項

    因為類型擦除的原因,我們在接口實現中,實現同一個接口的兩個不同類型是無意義的:

    publicclasssomeClassimplementsComparable<Number>,Comparable<String>{...}//no

    因為在編譯過后的字節碼看來,兩個Comparable是一樣的。

    同樣的,我們使用T來做類型強制轉換也是沒有意義的:

    public<T>Tcast(Tt,Objecto){return(T)o;}

    因為編譯器并不知道這個強制轉換是對還是錯。

 以上就是動力節點java培訓機構的小編針對“秒懂,深入學習java泛型使用”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久精品夜色国产 | 久久综合在线 | 日本中文字幕在线精品 | 亚洲综合网站久久久 | 亚洲欧洲日韩国产一区二区三区 | 91久久亚洲最新一本 | 亚欧乱色视频大全 | 成人私拍福利视频在线 | 四虎国产精品免费入口 | 俺去也理论网站 | 操白嫩美女 | 色偷偷精品视频在线播放 | 99久久精品免费看国产一区二区 | 亚洲国产精品综合福利专区 | 国产精品亚洲欧美日韩久久 | 99热精品久久 | 欧美日韩中文亚洲v在线综合 | 成人深夜视频在线观看 | 欧美jizz19性欧美 | 在线激情网址 | 欧美日韩亚洲综合 | 色狠狠一区二区三区香蕉蜜桃 | 精品一区二区三区在线视频观看 | 国产综合久久 | 每日更新在线观看av | 久久久网 | 在线视频日韩精品 | 日韩国产欧美成人一区二区影院 | 污宅男666在线永久免费观看 | 奇米吧| 26uuu欧美视频在线观看 | 手机看片国产永久1204 | 99视频久久精品久久 | 四虎在线成人免费网站 | 狠狠干夜夜操 | 波多野结衣免费一区二区三区香蕉 | 四虎永久在线观看免费网站网址 | 久久99久久99精品免观看不卡 | 国产成人丝袜精品自啪在线 | 亚洲欧美综合另类 | 亚洲欧美精品一中文字幕 |