成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java類型擦除(java type erasure mechanism)

nodejh / 612人閱讀

摘要:在之后提供了泛型,允許在定義類的時(shí)候使用類型作為參數(shù)。泛型廣泛應(yīng)用于各類集合中。本文對(duì)其以及其用法進(jìn)行介紹。報(bào)錯(cuò)如下原因是類型擦除機(jī)制,在編譯成文件時(shí)候,編譯器并未把和類型信息編譯進(jìn)去。通配符和無界通配符無界通配符可接收任何類型。

在JDK5之后java提供了泛型(Java Genertics),允許在定義類的時(shí)候使用類型作為參數(shù)。泛型廣泛應(yīng)用于各類集合中。本文對(duì)其以及其用法進(jìn)行介紹。
1. 一個(gè)常見的錯(cuò)誤
public class Main {
    public static void main(String[] args) throws IOException {
        ArrayList al = new ArrayList();
        al.add("a");
        al.add("b");
 
        accept(al);
    }
 
    public static void accept(ArrayList al){
        for(Object o: al)
            System.out.println(o);
    }
}

似乎Object是String的父類,并沒有問題。但是,編譯時(shí)候是不能通過的。報(bào)錯(cuò)如下:

The method accept(ArrayList < Object > ) in the type Main is not applicable for the arguments 
(ArrayList < String > )
2. List vs List

原因是java類型擦除機(jī)制,在編譯成class文件時(shí)候,編譯器并未把Object和String類型信息編譯進(jìn)去。因此為了防止錯(cuò)誤,編譯器在編譯時(shí)候發(fā)現(xiàn)他們不一致就會(huì)報(bào)錯(cuò)。

3. 通配符和無界通配符 (1) 無界通配符

List 可接收任何類型。

public static void main(String args[]) {
        ArrayList al = new ArrayList();
        al.add("abc");
        test(al);
    }
 
    public static void test(ArrayList al){
        for(Object e: al){//no matter what type, it will be Object
            System.out.println(e);
// in this method, because we don"t know what type ? is, we can not add anything to al. 
        }
    }
(2)通配符
List< Object > - List can contain Object or it"s subtype
 
List< ? extends Number > -  List can contain Number or its subtypes.
List< ? super Number > - List can contain Number or its supertypes.
轉(zhuǎn)自我的博客園(http://www.cnblogs.com/qins/p...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70809.html

相關(guān)文章

  • Java泛型: 類型擦除(type erasure)

    摘要:泛型類型僅存在于編譯期間,編譯后的字節(jié)碼和運(yùn)行時(shí)不包含泛型信息,所有的泛型類型映射到同一份字節(jié)碼。的本質(zhì)泛型編譯器原始類型被替換泛型編譯器原始類型被替換原始類型指被編譯器擦除了泛型信息后,類型變量在字節(jié)碼中的具體類型。 type erasure & reified generic Java的泛型不同于C++的模板:Java泛型是type erasure,C++模板是reified g...

    nidaye 評(píng)論0 收藏0
  • Unchecked Conversion 導(dǎo)致的 Java 方法返回類型變更

    摘要:?jiǎn)栴}在遇到有同學(xué)反饋了個(gè)問題第一眼的感覺應(yīng)該是泛型擦除和類型推斷導(dǎo)致的但當(dāng)我嘗試去徹底解釋這個(gè)問題的時(shí)候才發(fā)現(xiàn)關(guān)鍵原因是如果在調(diào)用方法時(shí)有那么方法返回的是定義中返回類型經(jīng)過擦除后的結(jié)果具體問題是這個(gè)樣子的錯(cuò)誤不兼容的類型無法轉(zhuǎn)換為猜測(cè) 問題 在 v2 遇到有同學(xué)反饋了個(gè)問題, 第一眼的感覺應(yīng)該是泛型擦除(Type Erasure)和類型推斷(Type Inference)導(dǎo)致的. 但當(dāng)...

    liangzai_cool 評(píng)論0 收藏0
  • 教妹學(xué) Java:晦澀難懂的泛型

    摘要:首先,我們來按照泛型的標(biāo)準(zhǔn)重新設(shè)計(jì)一下類。注意參數(shù)為而不是泛型。利用形式的通配符,可以實(shí)現(xiàn)泛型的向上轉(zhuǎn)型,來看例子。需要注意的是,無法從這樣類型的中取出數(shù)據(jù)。showImg(https://user-gold-cdn.xitu.io/2019/5/17/16ac3bf3eb16160c); 00、故事的起源 二哥,要不我上大學(xué)的時(shí)候也學(xué)習(xí)編程吧?有一天,三妹突發(fā)奇想地問我。 你確定要做一名...

    Crazy_Coder 評(píng)論0 收藏0
  • Java泛型

    摘要:泛型的參數(shù)只可以代表類,不能代表個(gè)別對(duì)象。生成的字節(jié)代碼中不包含類型信息例如編譯后看到的只是靜態(tài)變量是被泛型類的所有實(shí)例所共享的。對(duì)于聲明為的類,訪問其中的靜態(tài)變量的方法仍然是。不管是通過還是創(chuàng)建的對(duì)象,都是共享一個(gè)靜態(tài)變量。 Java泛型的參數(shù)只可以代表類,不能代表個(gè)別對(duì)象。 由于Java泛型的類型參數(shù)之實(shí)際類型在編譯時(shí)會(huì)被消除,所以無法在運(yùn)行時(shí)得知其類型參數(shù)的類型。 In Jav...

    hankkin 評(píng)論0 收藏0
  • Java泛型總結(jié)

    摘要:靜態(tài)變量是被泛型類的所有實(shí)例所共享的。對(duì)于這個(gè)類型系統(tǒng),有如下的一些規(guī)則相同類型參數(shù)的泛型類的關(guān)系取決于泛型類自身的繼承體系結(jié)構(gòu)。在代碼中避免泛型類和原始類型的混用。參考泛型類型擦除 Java泛型總結(jié) Java泛型是JDK5引入的一個(gè)新特性,允許在定義類和接口的時(shí)候使用類型參數(shù)(type parameter)。聲明的類型參數(shù)在使用的時(shí)候使用具體的類型來替換。泛型最主要的應(yīng)用是在JDK5...

    CoreDump 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<