我不能在泛型中使用继承的类而不是母类

时间:2018-02-03 16:06:07

标签: java android android-studio

嗨,假设以下简单类:

public class CRUDController<T extends __Entity<T>> {
 ...
}

public class Tag extends __Entity<Tag> {
...
}

public class KalaTag extends Tag {
...
}

当我使用public class TestController extends CRUDController<Tag>时,一切正常,但当我使用public class TestController extends CRUDController<KalaTag>时,会出现以下错误:

  

输入参数&#39; KalaTag&#39;不在其范围内;应该扩展&#39; __实体&lt; KalaTag&gt;&#39;

  • 我的问题是什么?
  • 我错了什么?

提前谢谢你;)

2 个答案:

答案 0 :(得分:3)

CRUDController期望其论据(T)延长__Entity<T>

显然KalaTag没有这样做,因为它扩展了__Entity<Tag>

可能的解决方案:

  1. 直接KalaTag延长__Entity<KalaTag>
  2. Tag定义为class Tag<T> extends __Entity<T>,然后class KalaTag extends Tag<KalaTag>

答案 1 :(得分:2)

另一个选项是允许CRUDController使用父类型__Entity绑定的任何T

public class CRUDController<T extends __Entity<? super T> > {
}

这又取决于您在T及其子类中对CRUDController的使用情况。