返回具有通用类型的接口时出错

尼尔·史密斯

我试图返回一个对象,该对象应该是具有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的特定类型。

罗希特·贾恩(Rohit Jain)

的层次结构ActualClass如下:

IClass<ActualType>
       ^
       |
Class<ActualType>
       ^
       |
   ActualClass

因此,IClass<ActualType>是的超级类型ActualClass但是您方法的返回类型是IClass<IType>即使IType是的超级类型ActualTypeIClass<IType>也不是的超级类型IClass<ActualType>,因此它也不是的超级类型ActualClass

因此,可以将方法的返回类型更改为IClass<ActualType>IClass<? extends IType>以下应该工作:

public IClass<? extends IType> createClass() {
    return new ActualClass();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章