假设我们有一个应该返回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/