PlayNowDescriptionItem

PlayNowDescriptionItem

我有以下抽象类:

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

10-07 12:52