java - 构造函数链

标签 java constructor

我们为什么使用这种形式? (这是关于 Java 复数视觉的类(class))

public MathEquation(char opCode)
    {
        this.opCode = opCode;
    }

public MathEquation(char opCode , double leftVal , double rightVal)
    {
        this(opCode);
        this.leftVal = leftVal;
        this.rightVal = rightVal;
    }

为什么不是这个呢?

public MathEquation(char opCode , double leftVal , double rightVal)
    {
        this.opCode = opCode
        this.leftVal = leftVal;
        this.rightVal = rightVal;    
    }

最佳答案

因为如果出于某种原因,您需要对操作码执行更多操作(例如在存储之前将其转换为大写,或检查它是否在某个范围内,或类似的操作),则无需重复该操作两个构造函数中的代码。一个将简单地调用另一个中已经编写的代码。

这个一般原则称为 DRY:不要重复自己。

请注意,它通常是在另一个方向进行的:最简单的构造函数调用最复杂的构造函数,指定为缺少的参数传递哪些默认值:

public MathEquation(char opCode) {
    this(opCode, 0.0, 0.0);
}

关于java - 构造函数链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45772835/

相关文章:

java - 绩效改进 - 如何开始

java - 自然语言解析,实际例子

java - Java错误: Default constructor cannot handle exception type FileNotFound Exception

c++ - C++ 标准中是否有任何计划来解决初始化列表构造函数的不一致问题?

c++ - X() = delete; 构造函数的区别和私有(private) X();

java - 当在我给定的代码中输入整数以外的输入时,它会进入无限循环

java - 如何在 Spring Boot 应用程序中将数据库架构更改从源数据库同步到目标数据库

java.lang.NoSuchMethodError : org. springframework.core.GenericTypeResolver.resolveTypeArguments(Ljava/lang/Class;Ljava/lang/Class;)

c++ - 为什么在新建数组时不能指定构造函数?

javascript - 将我的函数变成构造函数