子类不能应用于超类Java

sir*_*ine 2 java generics abstract-class casting subclass

我有以下抽象类:

public abstract class MyObject<T extends DescriptionItem> {

    protected abstract MyObject generate(T item);
}
Run Code Online (Sandbox Code Playgroud)

它有以下子类:

public class AudioObject extends MyObject<PlayNowDescriptionItem> {

    @Override
    protected MyObject generate(PlayNowDescriptionItem item) {
        //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

PlayNowDescriptionItem扩展了DescriptionItem.我还有一个用于生成对象的工厂类.

public class ObjectFactory {

 public MyObject generateCastObject(DescriptionItem item) {
    if (item instanceof PlayNowDescriptionItem) {
        return new AudioObject(context).generate(item);
}
Run Code Online (Sandbox Code Playgroud)

我认为这样可以正常工作,因为PlayNowDescriptionItem是DescriptionItem的子节点,但我在下一行中收到错误.

     return new AudioObject(context).generate(item);
Run Code Online (Sandbox Code Playgroud)

AudioObject中的PlayNowDecriptionItem无法应用于DescriptionItem.

谁能看到我在这里做错了什么?

Ale*_*rov 7

你需要投你DescriptionItemPlayNowDescriptionItem是这样的:

return new AudioObject(context).generate((PlayNowDescriptionItem)item);
Run Code Online (Sandbox Code Playgroud)

当你定义generate方法来接受DescriptionItem的子类时(请注意,类PlayNowDescriptionItem的对象也是类的对象,DescriptionItem但相反的并不总是有效的,例如.可能是一个PlayAfterDescriptionItem不是a 的子类PlayNowDescriptionItem)