为什么java集合中的泛型如此奇怪?
例如,java.util.Collections中的check方法为什么java集合中的泛型如此奇怪?,java,generics,compiler-construction,Java,Generics,Compiler Construction,例如,java.util.Collections中的check方法 public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) publicstaticintbinarysearch(List您可以这样定义它,但是这样就不允许您使用比较器来搜索列表 基本上,这里所表达的方差允许在保持类型安全的同时更灵活。 < P>放大了一点,java
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
publicstaticintbinarysearch(List您可以这样定义它,但是这样就不允许您使用比较器来搜索列表
基本上,这里所表达的方差允许在保持类型安全的同时更灵活。
< P>放大了一点,java的泛型不像C++模板。一些设计决策(比如类型删除)对于泛型,为了JVM本身的向后兼容性而设计的,会导致笨拙的语法和复杂的用例。泛型不是协变的(以及通配符语法,它让您可以安全地执行您想要的操作)与类型擦除或向后兼容性无关。为了介绍您的示例,我可以定义publicstaticintbinarysearch(List,t键,Comparator@yura:是的,但是如果您有列表,则无法使用它
public static <T> int binarySearch(List<T> list, T key, Comparator<T> c)