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

資訊專欄INFORMATION COLUMN

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

史占廣 / 1436人閱讀

泛型原始類型

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

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

要創(chuàng)建參數(shù)化類型的Box,請為形式類型參數(shù)T提供實際類型參數(shù):

Box intBox = new Box<>();

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

Box rawBox = new Box();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • Java? 教程泛型類型

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

    Crazy_Coder 評論0 收藏0
  • Java? 教程(自動裝箱和拆箱)

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

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

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

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

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

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

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

    lifesimple 評論0 收藏0

發(fā)表評論

0條評論

史占廣

|高級講師

TA的文章

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