Java - 强制子类在构造函数之后调用 super 方法

标签 java inheritance constructor

我想要一堆子类在像这样完成构造函数后调用一个 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/

相关文章:

java - 使用Java时小数位数太多?

java - 将 Spinner 值保存到变量

android - Gradle:如何让产品口味从 src/main 继承,除了一个

constructor - PHPUnit - 在 Mockery 中禁用原始构造函数

java - 在构造函数中设置并且不能更改

Java -Xms 初始大小效果

java - RandomAccessSubList 未序列化

c++ - SequenceContainer 基类?

Django:查询抽象基类

c++ - 使用构造函数初始化指向已定义结构的指针数组