java - 在 Java 中扩展泛型的限制,有什么办法可以解决它?

标签 java generics inheritance

我有以下模型可以在我的应用程序中制作 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();

然后ParentControllerSonController看起来像

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/

相关文章:

C++ 虚拟继承、类可见性?

java - 用Java或C将1010存储在矩阵中

java - 提取驱动器号,java正则表达式

scala - Scala 中如何处理返回泛型类型对象的函数

java - 为什么这个通用代码在 java 8 中编译?

linq - 动态 Linq 帮助,不同的错误取决于作为参数传递的对象?

java - 如何处理接口(interface)子类的变化?

c++ - 类对象还是指向它们对象的指针?类对象组合与实现

java - 计算成绩数组

java - 如何使用 Spring Integration 实现 MQTT 服务器?