子类不能应用于超类Java

问题描述 投票:2回答:1

我有以下抽象类:

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。

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

java generics casting abstract-class subclass
1个回答
7
投票

你需要像这样把你的DescriptionItem施放到PlayNowDescriptionItem

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

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

© www.soinside.com 2019 - 2024. All rights reserved.