构造链

时间:2017-08-19 14:42:37

标签: java constructor

为什么我们使用这个表格? (这是关于Java的复数视线的课程)

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;    
    }

3 个答案:

答案 0 :(得分:7)

因为出于某种原因,如果你需要用opCode做更多的事情(比如在存储之前把它变成大写,或者在某个范围内检查它,或者类似的东西),你就不必重复那个两个构造函数中的代码。一个人只会调用已经写在另一个中的代码。

这个一般原则叫做DRY:不要重复自己。

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

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

答案 1 :(得分:2)

关键是:您希望最小化构造函数所做的不同工作量。

从这个角度来看,最佳解决方案是一个arg构造函数调用3 arg构造函数(使其也明确应该为其他两个参数使用哪些默认值)!当你这样做时,只有一个构造函数做某事 - 而在你的例子中,3个arg构造函数执行并且调用另一个构造函数。

含义:问题中使用的形式都不理想。

答案 2 :(得分:1)

遵守

S - 单一责任原则
O - 开放原则

以下构造函数仅负责一个操作,如果将来要扩展功能,则可以轻松完成。

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