【发布时间】:2019-10-07 13:33:38
【问题描述】:
下面的代码在 Eclipse 中编译没有任何错误,但在 Javac 中生成错误。好像是编译器错误,但不知道哪个是对的。
我想指出,我知道如何通过更改代码来纠正此错误,以使其适用于两者,但这不是当前的主题。我只想知道是java还是eclipse的问题。
我尝试使用 Intellij,但我有同样的 javac 错误。
重现此错误的示例代码:
import java.util.ArrayList;
import java.util.List;
public class A<T extends B> {
protected List<C> list = new ArrayList<>();
class C {}
public void createIO() {
A<? extends B> x = null;
List<A<? extends B>.C> y = x.list;
}
}
class B {
}
JVM:
openjdk version "13-BellSoft" 2019-09-17
OpenJDK Runtime Environment (build 13-BellSoft+33)
OpenJDK 64-Bit Server VM (build 13-BellSoft+33, mixed mode, sharing)
使用 Eclipse,我没有任何错误。使用 Javac,我有 错误:
A.java:13: error: incompatible types: List<A<CAP#1>.C> cannot be converted to List<A<? extends B>.C>
List<A<? extends B>.C> y = x.list;
^
where CAP#1 is a fresh type-variable:
CAP#1 extends B from capture of ? extends B
【问题讨论】:
标签: java eclipse generics compilation javac