亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

java類(lèi)型擦除

MageekChiu / 867人閱讀

摘要:因?yàn)榉?hào)可以匹配任意類(lèi)型,因此可以處理任意類(lèi)型的數(shù)據(jù)。因?yàn)樵鷳B(tài)類(lèi)型沒(méi)有限制,所以它很容易是集合混亂,換句話說(shuō),無(wú)界通配符是安全的而原生態(tài)類(lèi)型不是安全的。

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

因?yàn)榉?hào)?可以匹配任意類(lèi)型,因此Set可以處理任意類(lèi)型的數(shù)據(jù)。

因?yàn)槲覀儾恢?指的是什么類(lèi)型,因此我們不能忘Set里面添加任何類(lèi)型的數(shù)據(jù)。

這兩點(diǎn)看起來(lái)是不是很矛盾,其實(shí)并不矛盾,看下面的兩個(gè)例子

第一要點(diǎn)代碼如下

//代碼不報(bào)錯(cuò)
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);
    }
}

第二要點(diǎn)代碼如下

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

這是因?yàn)槲覀儾恢溃克割?lèi)型,因此除了null外的所有類(lèi)型我們都不能往里面添加。同樣的,我們不能初始化一個(gè)Set類(lèi)型為?,如下

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

看如下代碼,是不會(huì)報(bào)錯(cuò)的。

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

因?yàn)樵鷳B(tài)類(lèi)型沒(méi)有限制,所以它很容易是集合混亂,換句話說(shuō),無(wú)界通配符是安全的而原生態(tài)類(lèi)型不是安全的。

3、何時(shí)使用Set

當(dāng)你使用泛型(generic type),但是你又不想關(guān)心實(shí)際泛型是什么的時(shí)候,使用無(wú)界通配符。如下:

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;
轉(zhuǎn)自我的博客園 http://cnblogs.com/qins/

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/70862.html

相關(guān)文章

  • Java? 教程(類(lèi)型擦除

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

    zsy888 評(píng)論0 收藏0
  • Java 泛型總結(jié)(一):基本用法與類(lèi)型擦除

    摘要:然而中的泛型使用了類(lèi)型擦除,所以只是偽泛型??偨Y(jié)本文介紹了泛型的使用,以及類(lèi)型擦除相關(guān)的問(wèn)題。一般情況下泛型的使用比較簡(jiǎn)單,但是某些情況下,尤其是自己編寫(xiě)使用泛型的類(lèi)或者方法時(shí)要注意類(lèi)型擦除的問(wèn)題。 簡(jiǎn)介 Java 在 1.5 引入了泛型機(jī)制,泛型本質(zhì)是參數(shù)化類(lèi)型,也就是說(shuō)變量的類(lèi)型是一個(gè)參數(shù),在使用時(shí)再指定為具體類(lèi)型。泛型可以用于類(lèi)、接口、方法,通過(guò)使用泛型可以使代碼更簡(jiǎn)單、安全。然...

    Java_oldboy 評(píng)論0 收藏0
  • Java泛型:類(lèi)型擦除

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

    Hanks10100 評(píng)論0 收藏0
  • 初探Java類(lèi)型擦除

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

    DevTalking 評(píng)論0 收藏0
  • Java系列之泛型

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

    MadPecker 評(píng)論0 收藏0
  • Java泛型總結(jié)

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

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

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

0條評(píng)論

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