我想要一堆子类在像这样完成构造函数后调用一个 super 方法:
public abstract class Superclass {
...
public Superclass(...) {
... // do stuff before initializing subclass
}
protected void dispatch() { //method to be called directly after creating an object
doStuff();
...
}
public abstract void doStuff();
}
public class Subclass extends Superclass {
...
public Subclass(...) {
super(...); //has to be the first line
... //assign variables etc.
dispatch(); //has to be called after variables are assigned etc.
}
public void doStuff() {
//do stuff with assigned variables etc.
}
}
dispatch()
函数包含一组在创建对象后对其进行处理的操作,这些操作必须应用于所有子类。我无法将此函数移动到 super 构造函数中,因为它从需要已分配变量的子类中调用方法。但是由于 super()
需要成为子构造函数的第一行,所以在调用 super 构造函数之前我不能设置任何变量。
它会像现在这样工作,但我发现在每个子类的构造函数末尾调用 dispatch()
是个坏主意。有没有更优雅的方法来解决这个问题?或者我什至应该完全重新考虑我的概念?
最佳答案
您的请求违反了多项 Java 最佳实践,例如:
不要在构造函数中进行复杂的配置,只填充私有(private)(最终)成员变量并且只进行非常基本的一致性检查(如果有的话)。
不要从构造函数中调用
非私有(private)
或非final
方法,即使是间接调用也不行。
因此,我强烈建议您考虑一下类(class)的设计。很可能是您的类(class)太大,责任太多。
关于Java - 强制子类在构造函数之后调用 super 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024810/