? 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)















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