Java 继承时未指定父类的泛型类型时出现不兼容类型错误

Java 继承时未指定父类的泛型类型时出现不兼容类型错误,java,generics,types,Java,Generics,Types,这是关于一个令人费解的“不兼容类型”错误,它是在编译下面的代码段时,经过一个小的修改后产生的 下面是一个极简类的内容,它在javac和IntelliJ中编译都没有问题: public final类ChildClass扩展了ParentClass{ 公开作废法(){ String value=stringList.get(0); } } 类父类{ 受保护的最终列表stringList=new ArrayList(); } 通过删除修改第一行后,使用javac编译它会产生以下错误消息: Child

这是关于一个令人费解的“不兼容类型”错误,它是在编译下面的代码段时,经过一个小的修改后产生的

下面是一个极简类的内容,它在javac和IntelliJ中编译都没有问题:

public final类ChildClass扩展了ParentClass{
公开作废法(){
String value=stringList.get(0);
}
}
类父类{
受保护的最终列表stringList=new ArrayList();
}
通过删除
修改第一行后,使用javac编译它会产生以下错误消息:

ChildClass.java:6: incompatible types
found   : java.lang.Object
required: java.lang.String
        String value = stringList.get(0);
                                     ^
1 error
IntelliJ编译器也会产生类似的错误消息

即使我理解修改后的代码不是真正推荐的,我也不理解为什么字符串列表会受到影响,尽管它不应该依赖于
t

未从其超类或超接口继承的原始类型C的构造函数(§8.8)、实例方法(§8.4,§9.4)或非静态字段(§8.3)M的类型是对应于在对应于C的泛型声明中删除其类型的原始类型

这意味着原始类型的所有泛型成员(=未使用类型参数的泛型成员)都被视为原始成员

您可以修复您的示例:

public final class ChildClass extends ParentClass {
    public void method() {
        String value = stringList.get(0);
    }
}

class ParentClass<T> extends NonGenericGrandParent {
}

class NonGenericGrandParent {
    protected final List<String> stringList = new ArrayList<String>();
}
public final类ChildClass扩展了ParentClass{
公开作废法(){
String value=stringList.get(0);
}
}
类ParentClass扩展非通用祖父母{
}
非一般祖父母{
受保护的最终列表stringList=new ArrayList();
}

您是否正确编译了它,或者您正在隐藏一些重要的代码。我想这不应该是个错误!我刚刚在eclipse中尝试过。这也给了我同样的错误,代码可以用javac和Eclipse编译。如果您使用原始类型,我可以理解这个问题…@PermGenError:Eclipse的哪个版本?我在EclipseJuno4.2.0中测试过JonSkeet,它对我来说工作得很好