为什么java集合中的泛型如此奇怪?

yur*_*ura 4 java compiler-construction generics

例如,java.util.Collections中的check方法

 public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 
Run Code Online (Sandbox Code Playgroud)

为什么我可以这样定义它:

 public static <T> int binarySearch(List<T> list, T key, Comparator<T> c) 
Run Code Online (Sandbox Code Playgroud)

为什么这在java中不起作用?

Jon*_*eet 14

可以通过这种方式定义它,但是那样就不会让您List<Circle>使用a Comparator<Shape>来搜索.

基本上,这里表达的差异允许更大的灵活性,同时保持类型安全性.