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

          Java泛型中的? super T語法

          Posted on 2007-08-15 15:51 ZelluX 閱讀(6560) 評論(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;
          }

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

          主站蜘蛛池模板: 祥云县| 浠水县| 家居| 兴化市| 营口市| 南召县| 汽车| 邹城市| 水城县| 科技| 奉贤区| 宝清县| 利津县| 垦利县| 太仆寺旗| 广宁县| 昭觉县| 阿城市| 全南县| 东山县| 新竹市| 冕宁县| 乌拉特后旗| 莱西市| 河东区| 崇阳县| 晋州市| 西华县| 亚东县| 南投市| 定兴县| 长沙县| 嵩明县| 泽普县| 巴马| 千阳县| 永川市| 华容县| 穆棱市| 龙井市| 舟曲县|