国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java類型擦除(java type erasure mechanism)

nodejh / 591人閱讀

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

在JDK5之后java提供了泛型(Java Genertics),允許在定義類的時候使用類型作為參數。泛型廣泛應用于各類集合中。本文對其以及其用法進行介紹。
1. 一個常見的錯誤
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的父類,并沒有問題。但是,編譯時候是不能通過的。報錯如下:

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

原因是java類型擦除機制,在編譯成class文件時候,編譯器并未把Object和String類型信息編譯進去。因此為了防止錯誤,編譯器在編譯時候發現他們不一致就會報錯。

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.
轉自我的博客園(http://www.cnblogs.com/qins/p...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70809.html

相關文章

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

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

    nidaye 評論0 收藏0
  • Unchecked Conversion 導致的 Java 方法返回類型變更

    摘要:問題在遇到有同學反饋了個問題第一眼的感覺應該是泛型擦除和類型推斷導致的但當我嘗試去徹底解釋這個問題的時候才發現關鍵原因是如果在調用方法時有那么方法返回的是定義中返回類型經過擦除后的結果具體問題是這個樣子的錯誤不兼容的類型無法轉換為猜測 問題 在 v2 遇到有同學反饋了個問題, 第一眼的感覺應該是泛型擦除(Type Erasure)和類型推斷(Type Inference)導致的. 但當...

    liangzai_cool 評論0 收藏0
  • 教妹學 Java:晦澀難懂的泛型

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

    Crazy_Coder 評論0 收藏0
  • Java泛型

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

    hankkin 評論0 收藏0
  • Java泛型總結

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

    CoreDump 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<