Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么java集合中的泛型如此奇怪?_Java_Generics_Compiler Construction - Fatal编程技术网

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

为什么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

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

 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)