posts - 1, comments - 0, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

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

          }



          ?



          dreamstone 2007-02-10 23:46 發表評論

          文章來源:http://www.aygfsteel.com/dreamstone/archive/2007/02/10/99195.html

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 云和县| 建阳市| 英德市| 永修县| 潞城市| 福清市| 普陀区| 南溪县| 个旧市| 弋阳县| 石棉县| 吉林市| 蒙城县| 灵璧县| 沾化县| 平阳县| 浦城县| 吕梁市| 阿拉善左旗| 濮阳县| 株洲市| 泸州市| 惠安县| 阿巴嘎旗| 东乌珠穆沁旗| 长海县| 宜宾县| 承德县| 永善县| 广宗县| 眉山市| 偃师市| 康马县| 河东区| 孟州市| 循化| 乾安县| 日土县| 景谷| 康平县| 和平区|