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

          Java泛型中的? super T語法

          Posted on 2007-08-15 15:51 ZelluX 閱讀(6567) 評論(0)  編輯  收藏 所屬分類: OOP

          ? super T 語法將泛型類限制為所有T的超類(包括T自身),但只能用于參數中,不可以在返回值用加以限定。
          如果不加以限定,假設某個函數頭為
          ? super Manager get()
          由于編譯器不知道該方法究竟會返回什么類,這樣就只能用Object類來接收了。

          該語法常用的一個情況是泛型類的比較
          java.util.TreeSet<E> 代表一個有序的元素為E的樹,它其中的一個構造器需要一個Comparator類來比較兩個元素,以E為String類時為例,此時的Comparator可以是Comparator<String>,也可以是Comparator<Object>,但Comparator<Integer>就不行,如何表示這樣的限制呢?
          jdk源代碼中是這樣的:
          public TreeSet(Comparator<? super E> c)
          這樣就保證了傳給構造器的Comparator是可以進行E元素的比較的。

          另一個例子,java.util.Collections的max方法用于獲得一個容器中的最大值,這個函數頭可以這樣寫:
          public static <T extends Comparable<T>>  T max(Collection<T> coll)

          這樣就限定T為能和自己比較的類,過于嚴格,jdk源碼是這樣的:
          public static <extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
              Iterator
          <? extends T> i = coll.iterator();
              T candidate 
          = i.next();

              
          while(i.hasNext()) {
              T next 
          = i.next();
              
          if (next.compareTo(candidate) > 0)
                  candidate 
          = next;
              }

              
          return candidate;
          }

          很嚴謹的函數頭,但是限定方面比較寬

          主站蜘蛛池模板: 海南省| 博野县| 甘泉县| 积石山| 乌兰浩特市| 广饶县| 色达县| 班玛县| 台中市| 和平县| 台东县| 长子县| 望奎县| 临泉县| 四子王旗| 图们市| 鄂尔多斯市| 武鸣县| 祁门县| 探索| 雷州市| 鄂托克前旗| 兴城市| 曲水县| 闽清县| 赫章县| 资溪县| 原平市| 南汇区| 保靖县| 哈巴河县| 临桂县| 腾冲县| 龙井市| 偃师市| 银川市| 加查县| 本溪| 安康市| 昌黎县| 河北省|