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