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

資訊專欄INFORMATION COLUMN

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

史占廣 / 1426人閱讀

泛型原始類型

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

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

要創建參數化類型的Box,請為形式類型參數T提供實際類型參數:

Box intBox = new Box<>();

如果省略實際的類型參數,則創建一個原始類型Box

Box rawBox = new Box();

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

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

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

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

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

如果使用原始類型調用相應泛型類型中定義的泛型方法,也會收到警告:

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

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

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

未經檢查的錯誤消息

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

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

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

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

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

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

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

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

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

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

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

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

相關文章

  • Java? 教程泛型類型

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

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

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

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

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

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

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

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

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

    lifesimple 評論0 收藏0

發表評論

0條評論

史占廣

|高級講師

TA的文章

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