Java 推理变量T有不相容的界

Java 推理变量T有不相容的界,java,generics,Java,Generics,给定一个具有以下签名的方法 public static <T extends Comparable<T>> int dummyMethod(List<T> list, T elem) { // Body } 公共静态int-dummyMethod(列表,元素){ //身体 } 在以下两种方法中,只有第一种方法编译成功 public void call() { MyClass v = new MyClass(); List<MyClass&

给定一个具有以下签名的方法

public static <T extends Comparable<T>> int dummyMethod(List<T> list, T elem) {
  // Body
}
公共静态int-dummyMethod(列表,元素){
//身体
}
在以下两种方法中,只有第一种方法编译成功

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.
}
公共作废调用(){
MyClass v=新的MyClass();
List ls=新的ArrayList();
Dummy法(ls,v);
}
公共无效brokenCall(){
可比v=新MyClass();
List ls=新的ArrayList();
dummyMethod(ls,v);//此处编译错误。
}
javac(JDK 8u60)返回的错误如下:

.\MyClass.java:23: error: method dummyMethod in class MyClass cannot be applied to given types;
    dummyMethod(ls, v);    // Compilation error here.
    ^
  required: List<T>,T
  found: List<Comparable<MyClass>>,Comparable<MyClass>
  reason: inference variable T has incompatible bounds
    equality constraints: MyClass,Comparable<MyClass>
    lower bounds: Comparable<MyClass>
  where T is a type-variable:
    T extends Comparable<T> declared in method <T>dummyMethod(List<T>,T)
1 error
\MyClass.java:23:错误:类MyClass中的方法dummyMethod无法应用于给定类型;
Dummy方法(ls,v);//这里有编译错误。
^
必填项:列表,T
发现:列表,可比
原因:推理变量T的边界不兼容
相等约束:MyClass,可比较
下限:可比
其中T是一个类型变量:
T扩展了方法dummyMethod(列表,T)中声明的可比性
1错误

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

brokenCall
中,您使
t
=
可比
,但
可比扩展可比
无效

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