我有以下抽象类:
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。
谁能看到我在这里做错了什么?
答案 0 :(得分:7)
您需要将decodeStream()
投射到DescriptionItem
,如下所示:
PlayNowDescriptionItem
当你定义generate方法来接受DescriptionItem的子类时(请注意,类return new AudioObject(context).generate((PlayNowDescriptionItem)item);
的对象也是类PlayNowDescriptionItem
的对象,但相反的并不总是有效的,例如。是一个子类DescriptionItem
,它不是PlayAfterDescriptionItem
)