这是关于在编译以下代码时产生的令人费解的“不兼容类型”错误,经过小的修改。
这是一个极简类的内容,它在 javac 和 IntelliJ 中编译都没有问题:
public final class ChildClass extends ParentClass<Object> {
public void method() {
String value = stringList.get(0);
}
}
class ParentClass<T> {
protected final List<String> stringList = new ArrayList<String>();
}
通过删除修改第一行后<Object>
,使用 javac 编译它会产生以下错误消息:
ChildClass.java:6: incompatible types
found : java.lang.Object
required: java.lang.String
String value = stringList.get(0);
^
1 error
IntelliJ 编译器也会产生类似的错误消息。
尽管我理解修改后的结果代码并不是真的推荐,但我并不真正理解为什么 String 列表会受到影响,尽管它不应该依赖于T
.