2016-05-17 16 views
7

Profesör tarafından, this kullanarak açık kurucu çağrısının "kötü kodlama uygulaması" olduğunu ve bunun için cezalandırıldığını söyledim. Bununla birlikte, herhangi bir java tarzı kılavuzda bu yorumları gözden geçirdiğim bir şey bulamadım. Bunun üzerine, gördüğüm oldukça kodlama örneklerinde yapılmış gibi görünüyor. Bunun kötü kodlama uygulaması olup olmadığına dair bir miktar bilgi almayı umuyordum.Açık Constructor Invocation 'bunu' kullanarak kötü kodlama uygulaması?

bir örneği ne bahsediyorum:

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

DÜZENLEME:. yayınlanan bu yorumu tamamen aynı sınıfın bir kurucu çağırmak Bir yapıcı iyi uygulama değildir Bir yapıcı bir nesne oluşturur, bu nedenle çağırarak" oldu Başka bir kurucuya hafızada neler olduğunu anlatan bir kurucu mu? Genelde

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

Kötü kodlama uygulaması için bir gerekçe gösterdiler mi? Gidebileceğim tek tahmin aynı isimde çok fazla değişken kullanmaktır (sınıf değişkeni ve yöntem değişkeni arasındaki karışıklık), ama yine de neden% 100 emin değilim ki, bu yüzden ... – Draken

+3

Her aşırı yüklenmede değişkenlerinizi yeniden atamaktan daha iyidir. – shmosel

+3

O sadece bir profesör, bu görüş temelli sorudaki en yüksek otorite değil. Elbette 'bu()', kurucunuzun diğer kuruculara dayandığını, ancak bu tür bağımlılığın "tehlikeli" olduğunu tartışabilir. Sınıfınızın – Kayaman

cevap

7

, zincir tesis sahiplerine this kötü tarzı değil kullanarak:

Ve bu özel kod oldu. Özellikle örneklerde kötü bir tarz olabilir, ancak bu kararı sadece belirli bir koda dayanarak hazırlayacağım. Yapay örnekler (örneğin sorunuzdaki anlamsız örnek) yargılanamaz.

Bu sizin konuşmacı aslında farklı bir konuda sizi "ping" olduğunu olabilir; Örneğin. gereksiz/kafa karıştırıcı/semantik bulanık yapıcı aşırı bir kova yükü oluşturmak

  • veya
  • yapıcı aşırı yükleri için iyi javadocs yazılı olup.

Her ikisi de (IMO) kodunuzu okumak ve sürdürmek için zorlaştırdıkları dereceye kadar kötü bir stil olur.


Bu tartışılabilir size neler olduğunu anlamak için daha yapıcıları bakmak gerekir Kurucular zincir halinde olduğunu. Ancak karşı argüman, tüm yapıcıların (yapay olarak) bağımsız bir şekilde KURUMSAL prensibini ihlal etmeleridir.

İlgili konular