我有以下模型可以在我的应用程序中制作 Controller 。显然,完整的模型更加复杂,但我将重点关注导致我出现问题的唯一部分:
public abstract AbstractController<T> {
abstract protected Class<T> getType();
}
public ParentController extends AbstractController<Parent> {
@Override
protected Class<Parent> getType() {
return Parent.class;
}
}
现在我想扩展 Parent 对象并为儿子创建一个 Controller ,它看起来像这样:
public SonController extends ParentController {
@Override
protected Class<Son> getType() {
return Son.class;
}
}
问题是 getType() 方法在编译中显示不兼容(需要类 Parent)。
我尝试使用泛型,但找不到解决方案。方法 getType 在抽象 Controller 的多个方法中使用,我真的很想避免重写这些方法。
欢迎提出任何想法。
最佳答案
您可以更改 getType
返回 Class<? extends T>
.
abstract protected Class<? extends T> getType();
然后ParentController
和 SonController
看起来像
public class ParentController extends AbstractController<Parent> {
@Override
protected Class<? extends Parent> getType() {
return Parent.class;
}
}
public class SonController extends ParentController {
@Override
protected Class<? extends Parent> getType() {
return Son.class;
}
}
关于java - 在 Java 中扩展泛型的限制,有什么办法可以解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078274/