成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java泛型

hankkin / 894人閱讀

摘要:泛型的參數(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 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編譯程序在編譯泛型時(shí)會(huì)自動(dòng)加入類型轉(zhuǎn)換的編碼

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的泛型在編譯器這個(gè)層次上實(shí)現(xiàn),使用泛型的時(shí)候加上的類型參數(shù)會(huì)在編譯的時(shí)候去掉。生成的Java字節(jié)代碼中不包含類型信息(例如List編譯后JVM看到的只是List>)

靜態(tài)變量是被泛型類的所有實(shí)例所共享的。對(duì)于聲明為 MyClass 的類,訪問其中的靜態(tài)變量的方法仍然是 MyClass.myStaticVar。不管是通過 new MyClass 還是 newMyClass 創(chuàng)建的對(duì)象,都是共享一個(gè)靜態(tài)變量。

泛型的類型參數(shù)不能用在Java異常處理的 catch 語句中。因?yàn)楫惓L幚硎怯蒍VM在運(yùn)行時(shí)刻來進(jìn)行的。由于類型信息被擦除,JVM是無法區(qū)分兩個(gè)異常類型 MyExceptionMyException 的。對(duì)于JVM來說,它們都是 MyException 類型的。也就無法執(zhí)行與異常對(duì)應(yīng)的catch語句。

通配符

一個(gè)方法如果接收 List 作為形式參數(shù),但是如果嘗試將一個(gè) List 的對(duì)象作為實(shí)際參數(shù)傳進(jìn)去 會(huì)因?yàn)閷?shí)際上包含隱含的類型轉(zhuǎn)換問題得到 compile err
但是如果使用 List 或者 List 則不會(huì)

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

    public void test() {
        ArrayList strs = new ArrayList();
        inspect(strs);
    }
    
    //不會(huì)報(bào)錯(cuò)

當(dāng)泛型類的類型聲明中使用了通配符的時(shí)候, 其子類型可以在兩個(gè)維度上分別展開。
如對(duì) Collection 來說

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/65837.html

相關(guān)文章

  • java編程思想》—— 泛型

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

    CODING 評(píng)論0 收藏0
  • Java知識(shí)點(diǎn)總結(jié)(Java泛型

    摘要:知識(shí)點(diǎn)總結(jié)泛型知識(shí)點(diǎn)總結(jié)泛型泛型泛型就是參數(shù)化類型適用于多種數(shù)據(jù)類型執(zhí)行相同的代碼泛型中的類型在使用時(shí)指定泛型歸根到底就是模版優(yōu)點(diǎn)使用泛型時(shí),在實(shí)際使用之前類型就已經(jīng)確定了,不需要強(qiáng)制類型轉(zhuǎn)換。 Java知識(shí)點(diǎn)總結(jié)(Java泛型) @(Java知識(shí)點(diǎn)總結(jié))[Java, Java泛型] [toc] 泛型 泛型就是參數(shù)化類型 適用于多種數(shù)據(jù)類型執(zhí)行相同的代碼 泛型中的類型在使用時(shí)指定 泛...

    linkin 評(píng)論0 收藏0
  • 聊聊Java泛型及實(shí)現(xiàn)

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

    lewif 評(píng)論0 收藏0
  • 淺析Java泛型

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

    godiscoder 評(píng)論0 收藏0
  • 初探Java類型擦除

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

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

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

0條評(píng)論

hankkin

|高級(jí)講師

TA的文章

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