这是一个下限通配符。
在只需要部分了解类型参数的情况下,通配符很有用。[...]上限由以下语法表示:
? extends B
其中 是上限。[...]允许在通配符上声明下限,使用以下语法:B
? super B
其中 是下限。B
例如,A 包括 、 和 。List<? super Integer>
List<Integer>
List<Number>
List<Object>
通配符用于使泛型更强大和灵活;边界用于维护类型安全。
另请参见
至于这在 中是如何有用的,那就是当你有类似.<T extends Comparable<? super T>>
Cat extends Animal implements Comparable<Animal>
查看 Collections.sort
的签名
public static <T extends Comparable<? super T>> void sort(List<T> list)
因此,使用 ,您现在可以 。List<Cat> listOfCat
Collections.sort(listOfCat)
如果声明如下:
public static <T extends Comparable<T>> void sort(List<T> list)
那么你必须使用.通过使用有界通配符,变得更加灵活。Cat implements Comparable<Cat>
sort
? super T
Collections.sort
另请参见
-
有效的 Java 第 2 版,第 28 项:使用有界通配符提高 API 灵活性
- 此外,PECS原则:“生产者消费者
extends
super
"