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

          Java泛型中的? super T語法

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

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

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

          另一個例子,java.util.Collections的max方法用于獲得一個容器中的最大值,這個函數(shù)頭可以這樣寫:
          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;
          }

          很嚴謹?shù)暮瘮?shù)頭,但是限定方面比較寬

          主站蜘蛛池模板: 翁牛特旗| 怀远县| 佛山市| 南昌县| 凤阳县| 灵武市| 广水市| 磴口县| 怀集县| 巫山县| 昂仁县| 赣榆县| 玉树县| 兖州市| 刚察县| 吴忠市| 兴海县| 嘉黎县| 新宁县| 波密县| 峨眉山市| 玛沁县| 潼关县| 巴南区| 博罗县| 泗阳县| 安图县| 碌曲县| 廉江市| 鞍山市| 类乌齐县| 苏州市| 巩留县| 中江县| 乌兰县| 鄂托克前旗| 玉环县| 宣威市| 苏尼特左旗| 玉林市| 永平县|