java - 如何强制用户提交继承自基类的类?

标签 java

假设我们有一个应该返回Class的抽象方法:

abstract class MainClass{
    abstract Class onCreateClass();
}

我已经实现了这样的类:

class ChildClass extends MainClass{
    @Override
    Class onCreateClass() {
        return AnotherClass.class;
    }
}
class AnotherClass {

}

效果很好,但现在我想在 AnotherClass 上声明一些约束。例如,我想强制 MainClass 的用户实现 onCreateClass,例如它只返回继承自 BaseClass 的类:

abstract class MainClass{
    abstract Class<BaseClass> onCreateClass();
}

但它不会编译这个:

class ChildClass extends MainClass{
    @Override
    Class onCreateClass() {
        return AnotherClass.class;
    }
}
class AnotherClass extends BaseClass {

}

最佳答案

您可以在 Class 声明中使用通用通配符:

abstract class MainClass{
    abstract Class<? extends BaseClass> onCreateClass(); <-- all classes extends BaseClass
}

class ChildClass extends MainClass{
    @Override
    Class<AnotherClass> onCreateClass() { <-- compilation valid
        return AnotherClass.class;
    }
}


class AnotherClass extends BaseClass {

}

private class BaseClass {
}


class SecondChildClass extends MainClass{
    @Override
    Class<SecondAnotherClass> onCreateClass() { <-- compilation failed
        return SecondAnotherClass.class;
    }
}

private class SecondAnotherClass {
}

关于java - 如何强制用户提交继承自基类的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692220/

相关文章:

java - 如何用边框包围 Java Swing 组件?

java - 增加工资加薪

java - 如何将 java.util.Optional 与 REST API 一起使用?

java - 使用 for 循环创建圣诞树

java - 找不到资源错误,Android 应用程序

使用 AES 的 Java 加密文件 - 最佳方法

java - 在 SimpleDateFormat 中包含通配符

java - 为什么具有不同参数的多个 `this()` 在父构造函数中不起作用?

java - 如何在windows中使用cmd启动程序

java - 如何实现 TCP 出站消息的重试策略