子类不能应用于超类 Java



我有以下抽象类:

public abstract class MyObject<T extends DescriptionItem> {
    protected abstract MyObject generate(T item);
}

它具有以下子类:

public class AudioObject extends MyObject<PlayNowDescriptionItem> {
    @Override
    protected MyObject generate(PlayNowDescriptionItem item) {
        //do something
    }
}

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

public class ObjectFactory {
 public MyObject generateCastObject(DescriptionItem item) {
    if (item instanceof PlayNowDescriptionItem) {
        return new AudioObject(context).generate(item);
}

我认为这会正常工作,因为PlayNowDescriptionItem是DescriptionItem的子项,但是我在下一行收到错误。

     return new AudioObject(context).generate(item);

AudioObject 中的 PlayNowDecriptionItem 不能应用于 DescriptionItem。

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

您需要像

这样将DescriptionItem投射到PlayNowDescriptionItem

return new AudioObject(context).generate((PlayNowDescriptionItem)item);

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

最新更新