我试图返回一个对象,该对象应该是具有IType实现的泛型类型的IClass实现。
public IClass<IType> createClass()
{
return new ActualClass();
}
我要返回的实际类扩展了Class(抽象),并使用了ActualType的通用类型:
public class ActualClass extends Class<ActualType>
抽象的Class对象实现IClass接口,并且可以具有任何扩展IType的类型。
public abstract class Class<T extends IType> implements IClass<T>
ActualType仅实现IType接口
public final class ActualType implements IType
编译时出现“类型不匹配:无法从ActualClass转换为IClass”错误。我不明白为什么,因为ActualClass实现IClass(通过Class间接),而ActualType实现IType。
我该如何重新排列才能使用?我做错了什么或被误解了?
理想情况下,我仍然希望有一个接口IClass和IType,一个抽象实现类,然后是一个ActualClass,它扩展了抽象类并具有实现IType的特定类型。
的层次结构ActualClass
如下:
IClass<ActualType>
^
|
Class<ActualType>
^
|
ActualClass
因此,IClass<ActualType>
是的超级类型ActualClass
。但是您方法的返回类型是IClass<IType>
。即使IType
是的超级类型ActualType
,IClass<IType>
也不是的超级类型IClass<ActualType>
,因此它也不是的超级类型ActualClass
。
因此,可以将方法的返回类型更改为IClass<ActualType>
或IClass<? extends IType>
。以下应该工作:
public IClass<? extends IType> createClass() {
return new ActualClass();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句