我有以下抽象类:
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
)