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
}