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

資訊專欄INFORMATION COLUMN

《Java編程思想》--持有對(duì)象--泛型和類型安全的容器

nemo / 1659人閱讀

摘要:層次結(jié)構(gòu)如上所示,的子類都可以作為集合的元素加入到集合中,并且不會(huì)有任何影響。在實(shí)際編碼中一般都建議使用類型安全的容器,這樣不容易出錯(cuò),出錯(cuò)也會(huì)在編譯期間就會(huì)展現(xiàn)出來。

概述

說起類型安全的容器,那么什么是類型不安全的容器呢?容器用來存儲(chǔ)數(shù)據(jù),常見的存儲(chǔ)數(shù)據(jù)的容器有數(shù)組和集合,數(shù)組有以下特點(diǎn):

長度固定

只能存儲(chǔ)同一種類型的數(shù)據(jù)

因?yàn)閿?shù)組只能存儲(chǔ)同一種數(shù)據(jù)類型的數(shù)據(jù),那么它就是類型安全的容器,因?yàn)榧峡梢源鎯?chǔ)任意類型的數(shù)據(jù),比如我可以在List中存儲(chǔ)一個(gè)Apple、一個(gè)Orange,但是在取的時(shí)候我不知道它們是什么,只知道它們是Object,這樣,我以為取出來的是Apple,但是取出來了一個(gè)Orange,我又想要用Apple的種子種蘋果,但是漲出來發(fā)現(xiàn)時(shí)橘子。

實(shí)例 類型不安全的容器
class Apple{
    private static long counter;
    private final long id = counter++;
    public long id(){
        return id;
    }
}

class Orange{

}


public class ApplesAndOrangesWithoutGenerics {
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        ArrayList apples = new ArrayList();
        for(int i = 0; i<3; i++){
            apples.add(new Apple());
        }

        apples.add(new Orange());

        for (int i = 0; i

@SuppressWarnings:不受檢查的異常,也就是可以抑制警告信息

存儲(chǔ)進(jìn)去三個(gè)Apple對(duì)象和一個(gè)Orangle對(duì)象

想取出Orange的id屬性

出現(xiàn)運(yùn)行時(shí)異常ClassCastException: net.sailfishc.holding.Orange cannot be cast to net.sailfishc.holding.Apple

類型安全的容器(泛型)
class Apple{
    private static long counter;
    private final long id = counter++;
    public long id(){
        return id;
    }
}

class Orange{

}


public class ApplesAndOrangesWithoutGenerics {
   
    public static void main(String[] args) {
        ArrayList apples = new ArrayList();
        for(int i = 0; i<3; i++){
            apples.add(new Apple());
        }

        // apples.add(new Orange());

        for (int i = 0; i

在創(chuàng)建List的時(shí)候加入了泛型,使其只能放入Apple

在試圖加入Orange的時(shí)候會(huì)出現(xiàn)編譯器異常

在取對(duì)象的時(shí)候不需要強(qiáng)制轉(zhuǎn)換為Apple,因?yàn)榫幾g器已經(jīng)知道存儲(chǔ)的是Apple

向上轉(zhuǎn)型使用泛型

明確指定某個(gè)類型作為泛型參數(shù)的時(shí)候,并不僅限于將該對(duì)象放置到容器中,向上轉(zhuǎn)型也可以像其他類型一樣作用于泛型。

class GrannySmith extends Apple{}
class Gala extends Apple{}
class Fuji extends Apple{}
class Braeburn extends Apple{}

public class GenericsAndUpcasting {
    public static void main(String[] args) {
        ArrayList apples = new ArrayList();
        apples.add(new Gala());
        apples.add(new GrannySmith());
        apples.add(new Fuji());
        apples.add(new Braeburn());
        for (Apple apple : apples) {
            System.out.println(apple);
        }

        List list1 = new ArrayList();
        List list2 = new LinkedList();
    }
}

Apple

GrannySmith

Gala

Fuji

Braeburn

層次結(jié)構(gòu)如上所示,Apple的子類都可以作為集合的元素加入到集合中,并且不會(huì)有任何影響。

在實(shí)際編碼中一般都建議使用類型安全的容器,這樣不容易出錯(cuò),出錯(cuò)也會(huì)在編譯期間就會(huì)展現(xiàn)出來。

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

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

相關(guān)文章

  • Java 持有對(duì)象(11)

    摘要:如果一個(gè)程序只包含固定數(shù)量且其生命周期都是已知的對(duì)象,那么這是一個(gè)非常簡(jiǎn)單的程序。 如果一個(gè)程序只包含固定數(shù)量且其生命周期都是已知的對(duì)象,那么這是一個(gè)非常簡(jiǎn)單的程序。 1.泛型和類型安全的容器 通過使用泛型,可以在編譯期防止將錯(cuò)誤類型的對(duì)象放置到容器中. 2.基本概念 Java容器類庫的用途是保存對(duì)象,并將其劃分為兩個(gè)不同的概念:Collection,Map. Collection...

    summerpxy 評(píng)論0 收藏0
  • Java 泛型總結(jié)(二):泛型與數(shù)組

    摘要:總結(jié)數(shù)組與泛型的關(guān)系還是有點(diǎn)復(fù)雜的,中不允許直接創(chuàng)建泛型數(shù)組。本文分析了其中原因并且總結(jié)了一些創(chuàng)建泛型數(shù)組的方式。 簡(jiǎn)介 上一篇文章介紹了泛型的基本用法以及類型擦除的問題,現(xiàn)在來看看泛型和數(shù)組的關(guān)系。數(shù)組相比于Java 類庫中的容器類是比較特殊的,主要體現(xiàn)在三個(gè)方面: 數(shù)組創(chuàng)建后大小便固定,但效率更高 數(shù)組能追蹤它內(nèi)部保存的元素的具體類型,插入的元素類型會(huì)在編譯期得到檢查 數(shù)組可以持...

    Vultr 評(píng)論0 收藏0
  • 理解Java泛型(一)

    摘要:參數(shù)化的類型其中是參數(shù)化的類型。類型參數(shù)的實(shí)例或?qū)嶋H類型參數(shù)其中是類型參數(shù)的實(shí)例或?qū)嶋H類型參數(shù)。它們并沒有重載,而且泛型中也不存在重載這一說法。除此之外,我們應(yīng)該盡量地多用泛型方法,而減少對(duì)整個(gè)類的泛化,因?yàn)榉盒头椒ǜ菀装咽虑檎f明白。 泛型是適用于許多許多的類型 ---《JAVA編程思想》 在Java的面向?qū)ο缶幊踢^程中, 或許你知道運(yùn)用繼承、接口等一系列面向?qū)ο蟮膭?dòng)作來實(shí)現(xiàn)代碼復(fù)用...

    YFan 評(píng)論0 收藏0
  • Java編程思想》讀后總結(jié)(一)

    摘要:前言編程思想這本書,陸陸續(xù)續(xù)讀了年,終于基本都瀏覽了一遍。每個(gè)對(duì)象對(duì)外暴露接口,程序通過對(duì)象暴露的接口向?qū)ο蟀l(fā)送消息,獲取該對(duì)象的服務(wù)能力。異常處理異常處理,為編寫程序階段提供了一種預(yù)見性的防止程序崩潰的出路。 前言 《Java編程思想》這本書,陸陸續(xù)續(xù)讀了1年,終于基本都瀏覽了一遍。通過這本書,試圖理解作者的想法,才真的體會(huì)到Java思想。感謝本書的作者,不僅講述了java的語法,更...

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

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

0條評(píng)論

nemo

|高級(jí)講師

TA的文章

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