子类不能应用于超类Java
我有以下抽象类:子类不能应用于超类Java,java,generics,casting,abstract-class,subclass,Java,Generics,Casting,Abstract Class,Subclass,我有以下抽象类: public abstract class MyObject<T extends DescriptionItem> { protected abstract MyObject generate(T item); } 我认为这会很好,因为PlayNowDescriptionItem是DescriptionItem的子级,但我在下面的一行中得到了一个错误 return new AudioObject(context).generate(item);
public abstract class MyObject<T extends DescriptionItem> {
protected abstract MyObject generate(T 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
)您需要显式强制转换:。生成((PlayNowDescriptionItem)项);
.Hei为什么答案不再标记为已接受?
return new AudioObject(context).generate(item);
return new AudioObject(context).generate((PlayNowDescriptionItem)item);