日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java泛型的類型擦除示例詳解

瀏覽:107日期:2023-02-09 08:39:08
目錄前言泛型的類型擦除原則是:1 擦除類定義中的類型參數(shù)1.1 無限制類型擦除1.2 有限制類型擦除2 擦除方法定義中的類型參數(shù)3 橋接方法和泛型的多態(tài)總結(jié)參考資料前言

Java泛型這個特性是從JDK 1.5才開始加入的,因此為了兼容之前的版本,Java泛型的實現(xiàn)采取了“偽泛型”的策略,即Java在語法上支持泛型,但是在編譯階段會進行所謂的“類型擦除”(Type Erasure),將所有的泛型表示(尖括號中的內(nèi)容)都替換為具體的類型(其對應(yīng)的原生態(tài)類型),就像完全沒有泛型一樣。理解類型擦除對于用好泛型是很有幫助的,尤其是一些看起來“疑難雜癥”的問題,弄明白了類型擦除也就迎刃而解了。

泛型的類型擦除原則是:

•消除類型參數(shù)聲明,即刪除<>及其包圍的部分。

•根據(jù)類型參數(shù)的上下界推斷并替換所有的類型參數(shù)為原生態(tài)類型:如果類型參數(shù)是無限制通配符或沒有上下界限定則替換為Object,如果存在上下界限定則根據(jù)子類替換原則取類型參數(shù)的最左邊限定類型(即父類)。

•為了保證類型安全,必要時插入強制類型轉(zhuǎn)換代碼。

•自動產(chǎn)生“橋接方法”以保證擦除類型后的代碼仍然具有泛型的“多態(tài)性”。

1 擦除類定義中的類型參數(shù)1.1 無限制類型擦除

當(dāng)類定義中的類型參數(shù)沒有任何限制時,在類型擦除中直接被替換為Object,即形如<T>和<?>的類型參數(shù)都被替換為Object,參見1。

Java泛型的類型擦除示例詳解

圖 1: 擦除類定義中的類型參數(shù)

1.2 有限制類型擦除

當(dāng)類定義中的類型參數(shù)存在限制(上下界)時,在類型擦除中替換為類型參數(shù)的上界或者下界,比如形如<T extends Number>和<? extends Number>的類型參數(shù)被替換為Number,<? super Number>被替換為Object,參見2。

Java泛型的類型擦除示例詳解

圖 2: 擦除類定義中的有限制類型參數(shù)

2 擦除方法定義中的類型參數(shù)

擦除方法定義中的類型參數(shù)原則和擦除類定義中的類型參數(shù)是一樣的,這里僅以擦除方法定義中的有限制類型參數(shù)為例,見3。

Java泛型的類型擦除示例詳解

圖 3: 擦除泛型方法中的類型參數(shù)

3 橋接方法和泛型的多態(tài)

考慮下面的代碼:

public interface Info&lt;T&gt; { // just return var:-) T info(T var); }public class BridgeMethodTest implements Info&lt;Integer&gt; { @Override public Integer info(Integer var) {return var; }}

按照我們之前類型擦除的經(jīng)驗,在擦除類型后的代碼應(yīng)該是這個樣子的:

public interface Info { // just return var Object info(Object var);}public class BridgeMethodTest implements Info { @Override public Integer info(Integer var) {return var; }}

但是,明顯可以看出,這樣擦除類型后的代碼在語法上是錯誤的:BridgeMethodTest類中雖然存在一個info方法,但是和Info接口要求覆蓋的info方法不一致:參數(shù)類型不一致。在這種情況下,Java編譯器會自動增加一個所謂的“橋接方法”(bridge method)來滿足Java語法的要求,同時也保證了基于泛型的多態(tài)能夠有效。我們反編譯一下BridgeMethodTest.class文件可以看到Java編譯器到底是如何做的:

$ javap BridgeMethodTest.class Compiled from “BridgeMethodTest.java”public class BridgeMethodTest implements Info<java.lang.Integer> {public BridgeMethodTest();public java.lang.Integer info(java.lang.Integer);public java.lang.Object info(java.lang.Object);}

可以看出,Java編譯器在BridgeMethodTest中自動增加了兩個方法:默認構(gòu)造方法和參數(shù)為Object的info方法,參數(shù)為Object的info方法就是“橋接方法”。如何理解“橋接”二字呢?我們進一步反編譯BridgeMethodTest看一下:

// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html// Decompiler options: packimports(3) // Source File Name: BridgeMethodTest.java public class BridgeMethodTest implements Info{ public BridgeMethodTest() { }public Integer info(Integer integer) { return integer; }public volatile Object info(Object obj) { return info((Integer)obj); } }

info(Object)方法通過調(diào)用子類的info(Integer)方法搭起了父類和子類的橋梁,也就是說,info(Object obj)這個方法起到了連接父類和子類的作用,使得Java的多態(tài)在泛型情況下依然有效。

當(dāng)然,我們在使用基于泛型的多態(tài)時不必過多的考慮“橋接方法”,Java編譯器會幫我們打理好一切。

關(guān)于橋接方法的更多信息可以參考:JLS的相關(guān)章節(jié)。

總結(jié)

到此這篇關(guān)于Java泛型類型擦除的文章就介紹到這了,更多相關(guān)Java泛型類型擦除內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

參考資料

•http://docs.oracle.com/javase/tutorial/java/generics/index.html

•http://docs.oracle.com/javase/tutorial/extra/generics/index.html

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩在线网站| 精品不卡一区| 黄色不卡一区| 亚洲激情中文| 国产精品毛片| 亚洲人成亚洲精品| 日韩在线观看中文字幕| 亚洲人成高清| 黑丝一区二区| 日韩在线卡一卡二| 午夜一级久久| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲精品电影| 视频一区二区国产| 免费观看在线色综合| 日本国产欧美| 国产一区不卡| 欧美a级一区| 免费人成精品欧美精品| 日韩国产一二三区| 国精品产品一区| 久久天堂精品| 久久国产99| 亚洲精品一级二级三级| 麻豆精品视频在线观看| 亚洲91精品| 中文字幕亚洲影视| 久久不见久久见中文字幕免费| 高清在线一区| 黄色亚洲大片免费在线观看| 亚洲精品自拍| 国产一区二区精品久| 欧美成人久久| 婷婷成人av| 高清日韩中文字幕| 午夜精品亚洲| 国产精品亚洲二区| 99精品美女| 中文字幕日韩高清在线| 久久精品国产网站| 狠狠爱成人网| 国产精品香蕉| av亚洲在线观看| 国产毛片精品久久| 激情婷婷综合| 国产精品久久久久久妇女 | 蜜臀久久99精品久久久画质超高清 | 一区二区电影在线观看| 日本欧美在线| 中文在线免费视频| 免费久久精品视频| 福利一区在线| 免费久久精品视频| 日韩av自拍| 色8久久久久| 成人精品中文字幕| 国产乱码精品一区二区三区四区 | 亚洲精品日本| 日韩一区欧美| 日本强好片久久久久久aaa| se01亚洲视频| 欧美日韩视频免费看| 国产高清一区二区| 久久精品资源| 亚洲欧洲日韩| 久久在线电影| 国产精品久久久久久av公交车| 精品一区亚洲| 欧美国产美女| 婷婷综合电影| 女人av一区| 色爱综合网欧美| 久久国产婷婷国产香蕉| 亚洲欧美日本国产专区一区| jizzjizz中国精品麻豆| 国产欧美一区二区色老头| 美女网站久久| 久久久久久久久久久9不雅视频| 欧美日韩一区二区国产| 国产毛片久久| 三级精品视频| 国产精品久久久久久久免费软件 | 日韩精品一区二区三区中文字幕| 天堂√8在线中文| 国产精品久久久久久模特| 老司机精品久久| 99精品美女| 麻豆成全视频免费观看在线看| 国产麻豆一区二区三区精品视频| 男人的天堂亚洲一区| 欧美精品激情| 日韩精品一区二区三区免费观看| 麻豆久久久久久久| 欧美在线黄色| 久久国产精品久久久久久电车| 精精国产xxxx视频在线播放| 精品亚洲免a| 国产精品久久久久久久久久久久久久久 | 国产99亚洲| 国产精品毛片久久| 国产精品亚洲片在线播放| 亚洲日本国产| 久久亚洲欧洲| 午夜欧美精品| 香蕉精品久久| 久久久久久免费视频| 天堂а√在线最新版中文在线| 麻豆视频一区| 国产精品片aa在线观看| 青青在线精品| 日本久久二区| 日韩av网站免费在线| 日韩毛片网站| 日韩动漫一区| 欧美日韩亚洲一区三区| 亚洲毛片视频| 日本在线不卡视频一二三区| 亚洲精品三级| 日本不卡视频在线| 日本a级不卡| 国产精品中文字幕制服诱惑| 国产亚洲欧美日韩精品一区二区三区 | 波多野结衣一区| 欧美日韩四区| 亚洲自啪免费| 深夜福利亚洲| 亚洲三区欧美一区国产二区| 综合欧美精品| 欧美日韩xxxx| 欧美成a人片免费观看久久五月天| 久久av超碰| 成人污污视频| 国产高清不卡| 蜜桃视频欧美| 亚洲一区二区成人| 婷婷视频一区二区三区| 欧美私人啪啪vps| 麻豆精品在线| 亚洲天堂免费电影| 蜜臀av免费一区二区三区| 99在线精品免费视频九九视 | 麻豆网站免费在线观看| 久久久久一区| 鲁大师成人一区二区三区| 一区二区三区网站| 欧美一级网站| 精品视频网站| 日韩中文在线播放| 中日韩男男gay无套| 少妇高潮一区二区三区99| 国产视频一区二区在线播放| 国际精品欧美精品| 国产专区一区| 视频一区视频二区中文字幕| 欧美日韩1区| 国产在线看片免费视频在线观看| 欧美日韩一区二区三区视频播放| 六月丁香综合| 国产精品久久久久久久久免费高清 | 亚洲欧洲高清| 不卡在线一区二区| 日韩精品一级| 91综合视频| 国产精品老牛| 国产精品一区亚洲| 久久精品国产www456c0m| 在线精品一区| 精品中文字幕一区二区三区四区| 亚洲高清久久| 久久精品av麻豆的观看方式| 久久久久国产精品一区三寸| 婷婷成人av| 欧美黄色网页| 日韩不卡手机在线v区| 欧美aa在线观看| 快she精品国产999| 精品日本视频| 一区二区三区四区日韩| 精品一二三区| 水蜜桃久久夜色精品一区的特点| 久久不卡日韩美女| 99视频精品| 精品不卡一区| 亚洲无线观看| 国产超碰精品| 国产欧美日韩一区二区三区四区 | 日本不良网站在线观看| 亚洲精品动态| 99精品电影| 日本不卡中文字幕| 亚洲二区在线| 麻豆精品99| 亚洲另类黄色| 久久青草久久| 牛牛精品成人免费视频| 免费在线成人网| 欧美不卡高清一区二区三区| 欧美日韩va| 亚洲一区二区免费看| 9999国产精品|