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

时间:2010-12-17 14:06:37

标签: java generics compiler-construction

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

 public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 

为什么我可以这样定义:

 public static <T> int binarySearch(List<T> list, T key, Comparator<T> c) 

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

2 个答案:

答案 0 :(得分:14)

可以以这种方式定义它,但那样就不会让你使用List<Circle>搜索Comparator<Shape>了。

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

答案 1 :(得分:0)

为了放大Jon Skeet的答案,Java的泛型不像C ++模板。对于JVM本身的向后兼容性而言,泛型的一些设计决策(如类型擦除)会导致语法笨拙和复杂的用例。 You can read about some of these here.