<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    DANCE WITH JAVA

    開發(fā)出高質(zhì)量的系統(tǒng)

    常用鏈接

    統(tǒng)計

    積分與排名

    好友之家

    最新評論

    JDK泛型中的問號(?)的用途 (泛型集合類的作為參數(shù)的時候的繼承問題)

    Jdk1.5中支持了泛型,在泛型的使用過程中經(jīng)常會遇到這樣一類問題

    類Parent
    public ? class ?Parent? {
    ?
    // your?code
    }


    類Child
    public ? class ?Child? extends ?Parent {
    // ?your?code
    }


    調(diào)用的地方

    import ?java.util.ArrayList;
    import ?java.util.List;

    import ?com.test.Child;


    public ? class ?Test? {
    ????
    public ? static ? void ?doTest(List < Parent > ?list) {
    ????????
    ????}

    ????
    public ? static ? void ?main(String[]?args) {
    ????????List
    < Parent > ?parentList? = ? new ?ArrayList < Parent > ();
    ????????List
    < Child > ?childList? = ? new ?ArrayList < Child > ();
    ????????doTest(parentList);
    ????????
    // 注意這里編譯錯誤
    ????????doTest(childList);
    ????????
    ????}

    }


    你會發(fā)現(xiàn)編譯錯誤,但是在我們的需求中Child的集合類是可以代替Parent的集合類來使用的,但是因為編譯器不認(rèn)同,因為兩個集合類之間沒有直接的繼承關(guān)系。如果實現(xiàn)呢?在Jdk1.5的Source中我們找到了答案,隨便找一個帶有泛型的類,點進(jìn)去可以看到泛型的定義,例如ArrayList<E>? HashMap<K,V>? 等等
    這里以ArrayList為例:注意addAll這個函數(shù)

    public ? boolean ?addAll(Collection <? ? extends ?E > ?c)? {
    ????Object[]?a?
    = ?c.toArray();
    ????????
    int ?numNew? = ?a.length;
    ????ensureCapacity(size?
    + ?numNew);?? // ?Increments?modCount
    ????????System.arraycopy(a,? 0 ,?elementData,?size,?numNew);
    ????????size?
    += ?numNew;
    ????
    return ?numNew? != ? 0 ;
    ????}

    ok,明白了,這個就是問號的作用.更改我們的函數(shù)

    import ?java.util.ArrayList;
    import ?java.util.List;

    public ? class ?Test? {
    ????????
    // 這里更改一下,利用問號解決問題?
    ???? public ? static ? void ?doTest(List <? ? extends ?Parent > ?list) {
    ????????
    ????}

    ????
    public ? static ? void ?main(String[]?args) {
    ????????List
    < Parent > ?parentList? = ? new ?ArrayList < Parent > ();
    ????????List
    < Child > ?childList? = ? new ?ArrayList < Child > ();
    ????????doTest(parentList);
    ????????
    // 注意這里編譯正確????????
    ????????doTest(childList)????}

    }



    ?

    posted on 2007-02-10 23:46 dreamstone 閱讀(8673) 評論(2)  編輯  收藏 所屬分類: jdk相關(guān)

    評論

    # re: JDK泛型中的問號(?)的用途 (泛型集合類的作為參數(shù)的時候的繼承問題) 2007-08-03 11:05 ZelluX

    原來還有這個東西,學(xué)到了,贊  回復(fù)  更多評論   

    # re: JDK泛型中的問號(?)的用途 (泛型集合類的作為參數(shù)的時候的繼承問題) 2011-06-01 17:03 cq

    謝謝,解惑了,?號是為了解決java泛型中List<String> 不是List<Object>子類,這樣關(guān)系的權(quán)宜之計。網(wǎng)上查到的資料采用類型擦除這樣的設(shè)計,是為了向前兼容,所以有了上述違法LSP原則的設(shè)計。  回復(fù)  更多評論   

    主站蜘蛛池模板: 亚洲黄色在线视频| 99re6免费视频| 在线观看国产区亚洲一区成人| 边摸边吃奶边做爽免费视频99| 免费黄色大片网站| 亚洲精品V天堂中文字幕| 天天摸天天碰成人免费视频| 最新亚洲卡一卡二卡三新区| 一区二区无码免费视频网站| 久久精品国产99国产精品亚洲| 免费看成人AA片无码视频羞羞网| 亚洲人成电影在线观看青青| 噼里啪啦免费观看高清动漫4| 久久精品国产亚洲av麻豆蜜芽| 欧美在线看片A免费观看| 一本色道久久综合亚洲精品蜜桃冫| 性感美女视频免费网站午夜 | 精品剧情v国产在免费线观看| 亚洲精品美女久久久久久久| 日本一道本高清免费| 看全免费的一级毛片| 亚洲日本在线观看视频| 中国毛片免费观看| 亚洲国产二区三区久久| 亚洲毛片免费视频| 亚洲综合激情五月色一区| 国产一区二区三区免费看| 一级午夜免费视频| 国产AV无码专区亚洲AV毛网站| 国产好大好硬好爽免费不卡| 亚洲美女视频网站| 女人18毛片免费观看| 黄床大片30分钟免费看 | 亚洲电影唐人社一区二区| 美女视频黄a视频全免费| 亚洲国产精品网站在线播放| 亚洲国产主播精品极品网红| 最近中文字幕免费大全| 亚洲麻豆精品果冻传媒| 成年午夜视频免费观看视频| 国产成人不卡亚洲精品91|