在子类中擦除的 Java 泛型成员类型



我有一个有以下成员的类:

public  class BaseContainer {
    protected LinkedHashMap<Enum, MyClass> places;
}

还有一个我使用受保护成员的子类:

public class NullContainer extends BaseContainer {
    public MyClass getSelectedPlace() {
        return places.values().iterator().next(); 
    }
}

我得到(在网豆中):
错误:类型
不兼容必填 : 我的类
找到 : 对象

为什么我现在需要投射?类型信息发生了什么变化?难道仅仅因为继承就被抹去了?我做错了什么。

那似乎是我的 java 编译器中的一个错误。谢谢大家的帮助。

所以最后我想我发现答案是jdk1.7.0_51中的一个错误(我正在使用)。https://bugs.openjdk.java.net/browse/JDK-8061736但是,有人认为这不是错误(请参阅错误报告的末尾):

原始类型的超类(分别称为超接口)

是对其任何参数化调用的超类(超接口)的擦除。因此,由于GenList是一个原始类型,方法getAValue的返回类型不是A或String,而是Object。这与javac的输出相对应。

(我真的认为这是一个错误,因为这样做所实现的只是现在我被迫在所有子类中强制转换此成员字段的每次出现,这没有任何意义......

最新更新