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

資訊專欄INFORMATION COLUMN

java類型擦除

MageekChiu / 809人閱讀

摘要:因為符號可以匹配任意類型,因此可以處理任意類型的數(shù)據(jù)。因為原生態(tài)類型沒有限制,所以它很容易是集合混亂,換句話說,無界通配符是安全的而原生態(tài)類型不是安全的。

我們都知道無界通配符(unbounded wildcard) Set可以處理任意類型數(shù)據(jù),原生態(tài)類型(raw type)Set也能處理任意類型數(shù)據(jù),但是他們區(qū)別是什么呢。
1、關于Set的兩個要點。

因為符號?可以匹配任意類型,因此Set可以處理任意類型的數(shù)據(jù)。

因為我們不知道?指的是什么類型,因此我們不能忘Set里面添加任何類型的數(shù)據(jù)。

這兩點看起來是不是很矛盾,其實并不矛盾,看下面的兩個例子

第一要點代碼如下

//代碼不報錯
public static void main(String[] args) {
    HashSet s1 = new HashSet(Arrays.asList(1, 2, 3));
    printSet(s1);
 
    HashSet s2 = new HashSet(Arrays.asList("a", "b", "c"));
    printSet(s2);
}
 
public static void printSet(Set s) {
    for (Object o : s) {
        System.out.println(o);
    }
}

第二要點代碼如下

public static void printSet(Set s) {
    s.add(10);// 本行代碼報錯
    for (Object o : s) {
        System.out.println(o);
    }
}

這是因為我們不知道?所指類型,因此除了null外的所有類型我們都不能往里面添加。同樣的,我們不能初始化一個Set類型為?,如下

Set set = new HashSet();
2、Set vs Set

看如下代碼,是不會報錯的。

public static void printSet(Set s) {
    s.add("2");
    for (Object o : s) {
        System.out.println(o);
    }
}

因為原生態(tài)類型沒有限制,所以它很容易是集合混亂,換句話說,無界通配符是安全的而原生態(tài)類型不是安全的。

3、何時使用Set

當你使用泛型(generic type),但是你又不想關心實際泛型是什么的時候,使用無界通配符。如下:

public static void main(String[] args) {
    HashSet s1 = new HashSet(Arrays.asList(1,2,3));
    HashSet s2 = new HashSet(Arrays.asList(4,2,3));
 
    System.out.println(getUnion(s1, s2));
}
 
public static int getUnion(Set s1, Set s2){
    int count = s1.size();
    for(Object o : s2){
        if(!s1.contains(o)){
            count++;
        }
    }
    return count;
轉自我的博客園 http://cnblogs.com/qins/

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

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

相關文章

  • Java? 教程(類型擦除

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

    zsy888 評論0 收藏0
  • Java 泛型總結(一):基本用法與類型擦除

    摘要:然而中的泛型使用了類型擦除,所以只是偽泛型。總結本文介紹了泛型的使用,以及類型擦除相關的問題。一般情況下泛型的使用比較簡單,但是某些情況下,尤其是自己編寫使用泛型的類或者方法時要注意類型擦除的問題。 簡介 Java 在 1.5 引入了泛型機制,泛型本質是參數(shù)化類型,也就是說變量的類型是一個參數(shù),在使用時再指定為具體類型。泛型可以用于類、接口、方法,通過使用泛型可以使代碼更簡單、安全。然...

    Java_oldboy 評論0 收藏0
  • Java泛型:類型擦除

    博客地址:Java泛型:類型擦除 前情回顧 Java泛型:泛型類、泛型接口和泛型方法 類型擦除 代碼片段一 Class c1 = new ArrayList().getClass(); Class c2 = new ArrayList().getClass(); System.out.println(c1 == c2); /* Output true */ 顯然在平時使用中,ArrayList...

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

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

    DevTalking 評論0 收藏0
  • Java系列之泛型

    摘要:總結泛型的類型必須是引用類型,不能是基本類型,泛型的個數(shù)可以有多個,可以使用對創(chuàng)建對象時的泛型類型以及方法參數(shù)類型進行限制,如使用關鍵字和對泛型的具體類型進行向下限制或向上限制,最后一點,可以聲明泛型數(shù)組,但是不能創(chuàng)建泛型數(shù)組的實例。 自從 JDK 1.5 提供了泛型概念,泛型使得開發(fā)者可以定義較為安全的類型,不至于強制類型轉化時出現(xiàn)類型轉化異常,在沒有反省之前,可以通過 Object...

    MadPecker 評論0 收藏0
  • Java泛型總結

    摘要:靜態(tài)變量是被泛型類的所有實例所共享的。對于這個類型系統(tǒng),有如下的一些規(guī)則相同類型參數(shù)的泛型類的關系取決于泛型類自身的繼承體系結構。在代碼中避免泛型類和原始類型的混用。參考泛型類型擦除 Java泛型總結 Java泛型是JDK5引入的一個新特性,允許在定義類和接口的時候使用類型參數(shù)(type parameter)。聲明的類型參數(shù)在使用的時候使用具體的類型來替換。泛型最主要的應用是在JDK5...

    CoreDump 評論0 收藏0

發(fā)表評論

0條評論

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