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

          Java泛型中的? super T語法

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

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

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

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

          這樣就限定T為能和自己比較的類,過于嚴(yán)格,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;
          }

          很嚴(yán)謹(jǐn)?shù)暮瘮?shù)頭,但是限定方面比較寬

          主站蜘蛛池模板: 荆州市| 城步| 宁都县| 遵义县| 柘荣县| 西峡县| 澎湖县| 怀宁县| 响水县| 塔河县| 安义县| 东丽区| 泊头市| 宁河县| 烟台市| 新巴尔虎右旗| 兴安盟| 哈尔滨市| 泊头市| 隆昌县| 丹阳市| 勐海县| 石河子市| 凯里市| 股票| 榆树市| 泸溪县| 甘孜| 新巴尔虎左旗| 五寨县| 汝南县| 电白县| 东兴市| 遵化市| 房产| 武威市| 宣武区| 保定市| 韩城市| 盐亭县| 广昌县|