Java 如何强制用户提交从基类继承的类?
假设我们有一个抽象方法,该方法应该返回Java 如何强制用户提交从基类继承的类?,java,Java,假设我们有一个抽象方法,该方法应该返回Class: abstract class MainClass{ abstract Class onCreateClass(); } abstract class MainClass{ abstract Class<BaseClass> onCreateClass(); } 我实现了如下类: class ChildClass extends MainClass{ @Override Class onCreate
Class
:
abstract class MainClass{
abstract Class onCreateClass();
}
abstract class MainClass{
abstract Class<BaseClass> onCreateClass();
}
我实现了如下类:
class ChildClass extends MainClass{
@Override
Class onCreateClass() {
return AnotherClass.class;
}
}
class AnotherClass {
}
它工作得很好,但现在我想在另一个类上声明一些约束。例如,我想强制MainClass
的用户实现onCreateClass
,这样它只返回从基类继承的类:
abstract class MainClass{
abstract Class onCreateClass();
}
abstract class MainClass{
abstract Class<BaseClass> onCreateClass();
}
你可以选择:
abstract class MainClass <T extends BaseClass> {
abstract Class<T> onCreateClass();
}
抽象类MainClass{
抽象类onCreateClass();
}
现在你要么去
class ChildClass extends MainClass<SomeSpecificClassExtendingBase> {
class<SomeSpecificClassExtendingBase> onCreateClass() {
return AnotherClass.class;
}
class子类扩展了main类{
类onCreateClass(){
返回另一个class.class;
}
或
class子类扩展了main类{
换句话说:您可以表达泛型类型的某些约束,这是一个更简单的示例,说明了如何实现这一点。您可能想进一步阅读或(硬核)。您选择:
abstract class MainClass <T extends BaseClass> {
abstract Class<T> onCreateClass();
}
抽象类MainClass{
抽象类onCreateClass();
}
现在你要么去
class ChildClass extends MainClass<SomeSpecificClassExtendingBase> {
class<SomeSpecificClassExtendingBase> onCreateClass() {
return AnotherClass.class;
}
class子类扩展了main类{
类onCreateClass(){
返回另一个class.class;
}
或
class子类扩展了main类{
换句话说:您可以表达泛型类型的某些约束,这是如何实现这一点的一个简单示例。您可能想进一步阅读或(硬核)。您可以在类声明中使用泛型通配符:
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 {
}
抽象类MainClass{
抽象类您可以在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 {
}
抽象类MainClass{
abstract Classisclass MainClass
java的有效语法?@VladBochenin我还没有喝早餐咖啡。你说得对。修复了!谢谢!很高兴看到27k+用户也会犯错;P@Fildor这是有目的的,以便社区中声誉较低的成员获得他们的“我可以在这里做出重大贡献”很抱歉,这一行class-ChildClass-extends-MainClass{
也有错误(未知类T)。应该与class-ChildClass-extends-MainClass类似{
class MainClass
java语法有效吗?@VladBochenin我还没有喝早餐咖啡。你说得对。修复了!谢谢!很高兴看到27k+用户也会犯错;P@Fildor这是有目的的,以便社区中声誉较低的成员获得他们的“我可以在这里做出重大贡献”很抱歉,这一行class-ChildClass-extends-MainClass{
也有错误(未知类T)。应该像class-ChildClass-extends-MainClass{