java泛型中類(lèi)型擦除的一些思考

java泛型

java泛型介紹

java泛型的參數(shù)只可以代表類(lèi)吴攒,不能代表個(gè)別對(duì)象。由于java泛型的類(lèi)型參數(shù)之實(shí)際類(lèi)型在編譯時(shí)會(huì)被消除砂蔽,所以無(wú)法在運(yùn)行時(shí)得知其類(lèi)型參數(shù)的類(lèi)型洼怔。java編譯器在編譯泛型時(shí)會(huì)自動(dòng)加入類(lèi)型轉(zhuǎn)換的編碼,故運(yùn)行速度不會(huì)因?yàn)槭褂梅盒投涌臁?/p>

泛型的好處是在編譯的時(shí)候檢查類(lèi)型安全左驾,并且所有的強(qiáng)制轉(zhuǎn)換都是自動(dòng)和隱式的茴厉,以提高代碼的復(fù)用率。

jvm泛型類(lèi)型擦除的規(guī)則:

  • 若泛型沒(méi)有制定具體類(lèi)型什荣,用Object作為原始類(lèi)型。
  • 若有限定類(lèi)型 <T extends XClass>,使用XClass作為原始類(lèi)型怀酷。
  • 若有多個(gè)限定<T extends XClass1 & XClass2>,使用第一個(gè)邊界類(lèi)型XClass1作為原始類(lèi)型稻爬。

泛型中的 extends 和 super介紹

[圖片上傳失敗...(image-75c81e-1634181875986)]

[圖片上傳失敗...(image-fd137c-1634181875986)]

為什么要泛型擦除

我自己的思考是因?yàn)閖vm中的類(lèi)加載機(jī)制,虛擬機(jī)會(huì)把類(lèi)信息加載到j(luò)vm中的方法區(qū)蜕依, 前面已經(jīng)說(shuō)過(guò)采用泛型是為了更好的復(fù)用桅锄,現(xiàn)在我們想一個(gè)場(chǎng)景,如果我們把所有的泛型類(lèi)都加載到j(luò)vm中的方法區(qū)中區(qū)样眠,就會(huì)導(dǎo)致jvm中類(lèi)信息爆炸友瘤。例如List<Integer>, List<Integer>, List<X1>,List<X2> ... 。這些類(lèi)信息在虛擬機(jī)中統(tǒng)一只加載List.

例子如下:

public class GenericType <T>{
    T value;

    public GenericType(T value) {
        this.value = value;
    }

    public void handleValue(){
        System.out.println("handle value =>" + value.toString());
    }
}

public static void main(String[] args) {
    GenericType<String> gStr = new GenericType<>("i am a string object");
    GenericType<Integer> gInteger = new GenericType<>(10000);
    System.out.println(gStr.getClass().getName());
    System.out.println(gInteger.getClass().getName());
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    while (classLoader != null) {
        System.out.println("classLoader:" + classLoader);
        try {
            Vector<Class<?>> classes = ClassPrint.list(classLoader);
            for (Class<?> c :
                    classes) {
                System.out.println("\t" + c.getName());
            }
            classLoader = classLoader.getParent();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    }

console中打印的信息如下:

com.df.qq.generic.GenericType
com.df.qq.generic.GenericType
classLoader:sun.misc.Launcher$AppClassLoader@18b4aac2
    com.intellij.rt.execution.application.AppMainV2$Agent
    com.intellij.rt.execution.application.AppMainV2
    com.intellij.rt.execution.application.AppMainV2$1
    com.df.qq.generic.GenericTest
    com.df.qq.generic.GenericType
    com.df.qq.generic.ClassPrint
classLoader:sun.misc.Launcher$ExtClassLoader@5e2de80c

Process finished with exit code 0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末檐束,一起剝皮案震驚了整個(gè)濱河市辫秧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌被丧,老刑警劉巖盟戏,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異甥桂,居然都是意外死亡柿究,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)黄选,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蝇摸,“玉大人,你說(shuō)我怎么就攤上這事办陷∶蚕Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵懂诗,是天一觀的道長(zhǎng)蜂嗽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)殃恒,這世上最難降的妖魔是什么植旧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任辱揭,我火速辦了婚禮,結(jié)果婚禮上病附,老公的妹妹穿的比我還像新娘问窃。我一直安慰自己,他們只是感情好完沪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布域庇。 她就那樣靜靜地躺著,像睡著了一般覆积。 火紅的嫁衣襯著肌膚如雪听皿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天宽档,我揣著相機(jī)與錄音尉姨,去河邊找鬼。 笑死吗冤,一個(gè)胖子當(dāng)著我的面吹牛又厉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播椎瘟,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼覆致,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了肺蔚?” 一聲冷哼從身側(cè)響起煌妈,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宣羊,沒(méi)想到半個(gè)月后声旺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡段只,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年腮猖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赞枕。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澈缺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炕婶,到底是詐尸還是另有隱情姐赡,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布柠掂,位于F島的核電站项滑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涯贞。R本人自食惡果不足惜枪狂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一危喉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧州疾,春花似錦辜限、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至颗胡,卻和暖如春毫深,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毒姨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工费什, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人手素。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瘩蚪,于是被迫代替她去往敵國(guó)和親泉懦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容