gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:08:38 25 4
gpt4 key购买 nike

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

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

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

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.
}

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

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

最佳答案

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

关于java - 推理变量 T 具有不兼容的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33041458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com