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

資訊專欄INFORMATION COLUMN

Java泛型

hankkin / 853人閱讀

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

Java泛型的參數只可以代表類,不能代表個別對象。

由于Java泛型的類型參數之實際類型在編譯時會被消除,所以無法在運行時得知其類型參數的類型。

In Java, generics are only checked at compile time for type correctness. The generic type information is then removed via a process called type erasure, to maintain compatibility with old JVM implementations, making it unavailable at runtime.

Java編譯程序在編譯泛型時會自動加入類型轉換的編碼

For example, a List is converted to the raw type List. The compiler inserts type casts to convert the elements to the String type when they are retrieved from the list, reducing performance compared to other implementations such as C++ templates.

類型擦除

Java的泛型在編譯器這個層次上實現,使用泛型的時候加上的類型參數會在編譯的時候去掉。生成的Java字節代碼中不包含類型信息(例如List編譯后JVM看到的只是List>)

靜態變量是被泛型類的所有實例所共享的。對于聲明為 MyClass 的類,訪問其中的靜態變量的方法仍然是 MyClass.myStaticVar。不管是通過 new MyClass 還是 newMyClass 創建的對象,都是共享一個靜態變量。

泛型的類型參數不能用在Java異常處理的 catch 語句中。因為異常處理是由JVM在運行時刻來進行的。由于類型信息被擦除,JVM是無法區分兩個異常類型 MyExceptionMyException 的。對于JVM來說,它們都是 MyException 類型的。也就無法執行與異常對應的catch語句。

通配符

一個方法如果接收 List 作為形式參數,但是如果嘗試將一個 List 的對象作為實際參數傳進去 會因為實際上包含隱含的類型轉換問題得到 compile err
但是如果使用 List 或者 List 則不會

    public void inspect(List list) {
        for (Object obj : list) {
            System.out.println(obj);
        }
    }

    public void test() {
        ArrayList strs = new ArrayList();
        inspect(strs);
    }
    
    //不會報錯

當泛型類的類型聲明中使用了通配符的時候, 其子類型可以在兩個維度上分別展開。
如對 Collection 來說

其子類型可以在 Collection 這個維度上展開,即 ListSet 等;

也可以在 Number 這個層次上展開,即 CollectionCollection 等。

如此循環下去,ArrayList和 HashSet等也都算是Collection的子類型。

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

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

相關文章

  • java編程思想》—— 泛型

    摘要:引用泛型除了方法因不能使用外部實例參數外,其他繼承實現成員變量,成員方法,方法返回值等都可使用。因此,生成的字節碼僅包含普通的類,接口和方法。 為什么要使用泛型程序設計? 一般的類和方法,只能使用具體的類型:要么是基本類型,要么是自定義類的對應類型;如果要編寫可以應用于多種類型的代碼,這種刻板的限制對代碼的束縛就會很大。----摘自原書Ordinary classes and meth...

    CODING 評論0 收藏0
  • Java知識點總結(Java泛型

    摘要:知識點總結泛型知識點總結泛型泛型泛型就是參數化類型適用于多種數據類型執行相同的代碼泛型中的類型在使用時指定泛型歸根到底就是模版優點使用泛型時,在實際使用之前類型就已經確定了,不需要強制類型轉換。 Java知識點總結(Java泛型) @(Java知識點總結)[Java, Java泛型] [toc] 泛型 泛型就是參數化類型 適用于多種數據類型執行相同的代碼 泛型中的類型在使用時指定 泛...

    linkin 評論0 收藏0
  • 聊聊Java泛型及實現

    摘要:靜態變量是被泛型類的所有實例所共享的。所以引用能完成泛型類型的檢查。對于這個類型系統,有如下的一些規則相同類型參數的泛型類的關系取決于泛型類自身的繼承體系結構。事實上,泛型類擴展都不合法。 前言 和C++以模板來實現靜多態不同,Java基于運行時支持選擇了泛型,兩者的實現原理大相庭徑。C++可以支持基本類型作為模板參數,Java卻只能接受類作為泛型參數;Java可以在泛型類的方法中取得...

    lewif 評論0 收藏0
  • 淺析Java泛型

    摘要:泛型類在類的申明時指定參數,即構成了泛型類。換句話說,泛型類可以看成普通類的工廠。的作用就是指明泛型的具體類型,而類型的變量,可以用來創建泛型類的對象。只有聲明了的方法才是泛型方法,泛型類中的使用了泛型的成員方法并不是泛型方法。 什么是泛型? 泛型是JDK 1.5的一項新特性,它的本質是參數化類型(Parameterized Type)的應用,也就是說所操作的數據類型被指定為一個參數,...

    godiscoder 評論0 收藏0
  • 初探Java類型擦除

    摘要:可以看到,如果我們給泛型類制定了上限,泛型擦除之后就會被替換成類型的上限。相應的,泛型類中定義的方法的類型也是如此。參考語言類型擦除下界通配符和的區別 本篇博客主要介紹了Java類型擦除的定義,詳細的介紹了類型擦除在Java中所出現的場景。 1. 什么是類型擦除 為了讓你們快速的對類型擦除有一個印象,首先舉一個很簡單也很經典的例子。 // 指定泛型為String List list1 ...

    DevTalking 評論0 收藏0

發表評論

0條評論

hankkin

|高級講師

TA的文章

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