例如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中不起作用?
答案 0 :(得分:14)
你可以以这种方式定义它,但那样就不会让你使用List<Circle>
搜索Comparator<Shape>
了。
基本上,这里表达的差异允许更大的灵活性,同时保持类型安全。
答案 1 :(得分:0)
为了放大Jon Skeet的答案,Java的泛型不像C ++模板。对于JVM本身的向后兼容性而言,泛型的一些设计决策(如类型擦除)会导致语法笨拙和复杂的用例。 You can read about some of these here.