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

          Java泛型中的? super T語法

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

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

          主站蜘蛛池模板: 佛教| 邵东县| 潜山县| 西充县| 教育| 长白| 崇阳县| 循化| 昌宁县| 呼和浩特市| 张家川| 全南县| 射洪县| 黄山市| 阿拉善右旗| 巢湖市| 灌云县| 河东区| 正镶白旗| 五台县| 汉阴县| 长垣县| 宜春市| 敦煌市| 大荔县| 濉溪县| 马公市| 神农架林区| 喀喇沁旗| 雅江县| 葫芦岛市| 新兴县| 轮台县| 大方县| 成安县| 肇源县| 浮梁县| 新安县| 古丈县| 贵南县| 宁晋县|