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

資訊專欄INFORMATION COLUMN

Java? 教程(泛型原始類型)

史占廣 / 1490人閱讀

泛型原始類型

原始類型是沒(méi)有任何類型參數(shù)的泛型類或接口的名稱,例如,給定Box泛型類:

public class Box {
    public void set(T t) { /* ... */ }
    // ...
}

要?jiǎng)?chuàng)建參數(shù)化類型的Box,請(qǐng)為形式類型參數(shù)T提供實(shí)際類型參數(shù):

Box intBox = new Box<>();

如果省略實(shí)際的類型參數(shù),則創(chuàng)建一個(gè)原始類型Box

Box rawBox = new Box();

因此,Box是泛型Box的原始類型,但是,非泛型類或接口類型不是原始類型。

原始類型出現(xiàn)在遺留代碼中,因?yàn)樵S多API類(例如Collections類)在JDK 5.0之前不是泛型的,使用原始類型時(shí),你實(shí)際上獲得預(yù)泛型行為 — Box會(huì)為你提供Object,為了向后兼容,允許將參數(shù)化類型分配給其原始類型:

Box stringBox = new Box<>();
Box rawBox = stringBox;               // OK

但是,如果將原始類型分配給參數(shù)化類型,則會(huì)收到警告:

Box rawBox = new Box();           // rawBox is a raw type of Box
Box intBox = rawBox;     // warning: unchecked conversion

如果使用原始類型調(diào)用相應(yīng)泛型類型中定義的泛型方法,也會(huì)收到警告:

Box stringBox = new Box<>();
Box rawBox = stringBox;
rawBox.set(8);  // warning: unchecked invocation to set(T)

警告顯示原始類型繞過(guò)泛型類型檢查,將不安全代碼的捕獲延遲到運(yùn)行時(shí),因此,你應(yīng)該避免使用原始類型。

類型消除部分提供了有關(guān)Java編譯器如何使用原始類型的更多信息。

未經(jīng)檢查的錯(cuò)誤消息

如前所述,在將遺留代碼與泛型代碼混合時(shí),你可能會(huì)遇到類似于以下內(nèi)容的警告消息:

Note: Example.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

在使用對(duì)原始類型進(jìn)行操作的舊API時(shí)會(huì)發(fā)生這種情況,如以下示例所示:

public class WarningDemo {
    public static void main(String[] args){
        Box bi;
        bi = createBox();
    }

    static Box createBox(){
        return new Box();
    }
}

術(shù)語(yǔ)“unchecked”表示編譯器沒(méi)有足夠的類型信息來(lái)執(zhí)行確保類型安全所必需的所有類型檢查,默認(rèn)情況下,“unchecked”警告被禁用,盡管編譯器會(huì)提示,要查看所有“unchecked”警告,請(qǐng)使用-Xlint:unchecked重新編譯。

使用-Xlint:unchecked重新編譯上一個(gè)示例顯示以下附加信息:

WarningDemo.java:4: warning: [unchecked] unchecked conversion
found   : Box
required: Box
        bi = createBox();
                      ^
1 warning

要完全禁用使用-Xlint:-unchecked標(biāo)志的未經(jīng)檢查的警告,@SuppressWarnings("unchecked")注解會(huì)抑制未經(jīng)檢查的警告,如果你不熟悉@SuppressWarnings語(yǔ)法,請(qǐng)參閱注解。

上一篇:泛型類型 下一篇:泛型方法

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

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

相關(guān)文章

  • Java? 教程泛型類型

    泛型類型 泛型類型是通過(guò)類型參數(shù)化的泛型類或接口,修改以下Box類以演示此概念。 一個(gè)簡(jiǎn)單的Box類 首先檢查一個(gè)對(duì)任何類型的對(duì)象進(jìn)行操作的非泛型Box類,它只需要提供兩個(gè)方法:set,它將一個(gè)對(duì)象添加到box中,get,它將檢索它: public class Box { private Object object; public void set(Object object) ...

    Crazy_Coder 評(píng)論0 收藏0
  • Java? 教程(自動(dòng)裝箱和拆箱)

    自動(dòng)裝箱和拆箱 自動(dòng)裝箱是Java編譯器在基元類型和相應(yīng)的對(duì)象包裝類之間進(jìn)行的自動(dòng)轉(zhuǎn)換,例如,將int轉(zhuǎn)換為Integer,將double轉(zhuǎn)換為Double,依此類推,如果轉(zhuǎn)換是另一種方式,則稱為拆箱。 以下是自動(dòng)裝箱的最簡(jiǎn)單示例: Character ch = a; 本節(jié)中的其余示例使用泛型,如果您還不熟悉泛型的語(yǔ)法,請(qǐng)參閱泛型課程。 考慮以下代碼: List li = new ArrayLis...

    cuieney 評(píng)論0 收藏0
  • Java? 教程泛型的限制)

    泛型的限制 要有效地使用Java泛型,必須考慮以下限制: 無(wú)法使用基元類型實(shí)例化泛型類型 無(wú)法創(chuàng)建類型參數(shù)的實(shí)例 無(wú)法聲明類型為類型參數(shù)的靜態(tài)字段 無(wú)法對(duì)參數(shù)化類型使用強(qiáng)制類型轉(zhuǎn)換或instanceof 無(wú)法創(chuàng)建參數(shù)化類型的數(shù)組 無(wú)法創(chuàng)建、捕獲或拋出參數(shù)化類型的對(duì)象 無(wú)法重載將每個(gè)重載的形式參數(shù)類型擦除為相同原始類型的方法 無(wú)法使用基元類型實(shí)例化泛型類型 考慮以下參數(shù)化類型: class P...

    Bowman_han 評(píng)論0 收藏0
  • Java? 教程類型擦除)

    類型擦除 泛型被引入到Java語(yǔ)言中,以便在編譯時(shí)提供更嚴(yán)格的類型檢查并支持通用編程,為了實(shí)現(xiàn)泛型,Java編譯器將類型擦除應(yīng)用于: 如果類型參數(shù)是無(wú)界的,則用它們的邊界或Object替換泛型類型中的所有類型參數(shù),因此,生成的字節(jié)碼僅包含普通的類、接口和方法。 如有必要,插入類型轉(zhuǎn)換以保持類型安全。 生成橋接方法以保留擴(kuò)展泛型類型中的多態(tài)性。 類型擦除確保不為參數(shù)化類型創(chuàng)建新類,因此,泛型不會(huì)...

    zsy888 評(píng)論0 收藏0
  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫(xiě)的,本頁(yè)面中描述的示例和實(shí)踐沒(méi)有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語(yǔ)言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書(shū)籍的形式提供,如Java教程,第六版,前往Amazon.com購(gòu)買。 入門 介紹Java技術(shù)和安裝Java開(kāi)發(fā)軟件并使用...

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

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

0條評(píng)論

史占廣

|高級(jí)講師

TA的文章

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