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