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

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

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

    DANCE WITH JAVA

    開發出高質量的系統

    常用鏈接

    統計

    積分與排名

    好友之家

    最新評論

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

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

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


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


    調用的地方

    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);
    ????????
    ????}

    }


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

    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,明白了,這個就是問號的作用.更改我們的函數

    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相關

    評論

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

    原來還有這個東西,學到了,贊  回復  更多評論   

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

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

    主站蜘蛛池模板: av午夜福利一片免费看久久| 91亚洲国产在人线播放午夜| 亚洲高清一区二区三区电影| 久久午夜免费视频| 亚洲不卡1卡2卡三卡2021麻豆| 国产成人福利免费视频| 亚洲制服丝袜在线播放| 无人在线观看免费高清视频| 亚洲欧美国产欧美色欲| 国产又大又粗又硬又长免费 | 久久久久成人精品免费播放动漫| 亚洲线精品一区二区三区| 日韩精品无码免费专区午夜| 久久亚洲高清观看| 18女人水真多免费高清毛片| 亚洲午夜电影在线观看| 日日AV拍夜夜添久久免费| 一级黄色免费网站| 亚洲av丰满熟妇在线播放| 亚洲一区二区三区免费视频| 亚洲中文字幕乱码熟女在线| 免费观看四虎精品国产永久| 国产精品九九久久免费视频 | 猫咪免费人成在线网站| 在线A亚洲老鸭窝天堂| 精品一区二区三区免费毛片爱| 亚洲香蕉在线观看| 亚洲AV无码乱码精品国产| 国产午夜成人免费看片无遮挡| 亚洲伊人久久大香线蕉啊| 国产v片免费播放| 免费一级不卡毛片| 亚洲另类无码一区二区三区| 337p日本欧洲亚洲大胆裸体艺术| 啦啦啦完整版免费视频在线观看| 亚洲国产精品无码第一区二区三区| 亚洲人成电影网站国产精品| 91av视频免费在线观看| 看Aⅴ免费毛片手机播放| 国产成人A人亚洲精品无码| 成人免费无码大片a毛片|