推理变量T具有不兼容的边界

时间:2015-10-09 14:58:35

标签: java generics

给定具有以下签名的方法。

Dim arr As Variant

在以下两种方法中,只有第一种方法成功编译。

public static <T extends Comparable<T>> int dummyMethod(List<T> list, T elem) {
  // Body
}

javac(JDK 8u60)返回的错误如下:

public void call() {
  MyClass v = new MyClass();
  List<MyClass> ls = new ArrayList<>();
  dummyMethod(ls, v);
}

public void brokenCall() {
  Comparable<MyClass> v = new MyClass();
  List<Comparable<MyClass>> ls = new ArrayList<>();
  dummyMethod(ls, v);    // Compilation error here.
}

我很困惑为什么在brokenCall中作为参数提供的变量类型与它的签名不匹配。

1 个答案:

答案 0 :(得分:3)

brokenCall,您正在制作T = Comparable<MyClass>,但Comparable<MyClass> extends Comparable<Comparable<MyClass>>无效。