显式构造函数调用使用' this'编码习惯不好?

时间:2016-05-17 06:37:56

标签: java constructor this

一位教授告诉我,使用this进行显式构造函数调用是不正确的编码实践"并为此受到惩罚。但是,我还没有找到任何java风格指南中的任何内容,我已经通过这种方式对其进行了评论。最重要的是,它似乎是在我看到的相当多的编码示例中完成的。我希望得到一些关于这是不良编码实践的原因以及原因。

我所指的一个例子:

public class SomeClass {

    private int a;
    private int b;

    public SomeClass() {
        this(0);
    }

    public SomeClass(int a) {
        this(a, 0);
    }

    public SomeClass(int a, int b) {
        this.a = a;
        this.b = b;
    }
}

编辑: 他的评论恰恰是"一个构造函数调用同一个类的构造函数并不是一个好习惯。构造函数创建一个对象,所以调用一个构造函数来调用另一个构造函数在内存中发生了什么?有点事情。"

这是具体的代码:

public class Employee {
    private String name;
    private int monthlySalary;

    // Default constructor
    public Employee() {
        this("", 0);
    }

    // Constructor
    public Employee(String name, int monthlySalary) {
        this.name = name;
        this.monthlySalary = monthlySalary;
    }

    // annualSalary() method returns the annual salary of the employee as an int
    public int annualSalary() {
        return monthlySalary * 12;
    }

    // toString() method returns the employee name and monthly salary as a 
    // String in the format: name, monthly salary
    public String toString() {
        return "Name: " + name + "\t\tMonthly Salary: " + monthlySalary;
    }
}

1 个答案:

答案 0 :(得分:7)

通常,使用this来链接构造函数并不是坏事。在特定的例子中它可能是坏的风格,但我只准备根据具体的代码做出判断。人工例子(例如你问题中无语义的例子)无法判断。

可能是你的讲师实际上已经" pinged"你在另一个问题上; e.g。

  • 创建一个不必要/混乱/语义混乱的构造函数重载的桶​​加载,或
  • 没有为构造函数重载编写合适的javadoc。

这两种情况都会导致(IMO)样式不佳,导致代码难以阅读和维护。

有争议的是,当你链接构造函数时,你需要查看更多的构造函数来理解发生了什么。但反驳的论点是,使所有构造者(人为地)独立地违反了DRY原则。