2016-05-17 74 views
7

一位教授告诉我,使用this的显式构造函数调用是“糟糕的编码实践”,因此受到惩罚。然而,我一直无法在任何java风格指南中找到任何东西,我已经通过这种或那种方式评论了这些评论。最重要的是,它似乎是在我见过的很多编码示例中完成的。我希望得到一些关于这是否糟糕的编码习惯以及为什么。显式构造函数使用'this'作为糟糕的编码实践?

的一个例子就是我指的是:

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

他们是否给出了一个推理性差的编码习惯?我唯一能做的就是使用相同名称的太多变量(类变量和方法变量之间的混淆),但我仍然不能100%确定他们为什么会这样说... – Draken

+3

我认为它好得多比在每个重载中重新分配变量。 – shmosel

+3

他只是一名教授,他不是这个基于观点的问题的最高权威。当然,使用this()会使你的构造函数依赖于其他的构造函数,但这种依赖性有多“危险”,这是值得商榷的。 – Kayaman

回答

7

一般而言,使用this到链构造不坏作风。在特定的例子中,这可能是不好的风格,但我只准备根据特定的代码做出判断。人为的例子(例如你的问题中没有语义的例子)不能被判断。

这可能是你的讲师实际上已经在不同的问题上“拼错”你;例如

  • 创建不必要/混乱/语义糊涂构造函数重载的桶​​负载,或
  • 不写为构造函数重载体面的javadocs。

这两种情况都会导致(IMO)的风格变得糟糕,以至于它们会让您的代码难以阅读和维护。


这是有争议的,当你链构造函数,你需要看看更多的构造函数,以了解发生了什么。但相反的观点是,使所有构造函数(人为地)独立违反DRY原则。