2016-05-17 73 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原則。