? 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)
很嚴謹的函數頭,但是限定方面比較寬
Powered by: BlogJava Copyright © ZelluX