Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子类不能应用于超类Java_Java_Generics_Casting_Abstract Class_Subclass - Fatal编程技术网

子类不能应用于超类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);