2013-03-31 52 views
-2

比如我有一個類Java類,在類構造函數中設置值的最佳實踐是什麼?

的Class1:

public class car{ 
private Color carColor; 
public car(Color carColor) 
{ 
    this.carColor = carColor; 
} 

public void setColor(Color carColor) 
{ 
    this.carColor = carColor; 
} 
} 

等級2:

public class car{ 
    private Color carColor; 
    public car(Color carColor) 
    { 
     setColor(carColor); 
    } 

    public void setColor(Color carColor) 
    { 
     this.carColor = carColor; 
    } 
} 

哪個構造將是Java代碼,爲什麼最好的做法?

+3

這兩個構造函數在語義上都是相同的。最佳實踐?我會說沒有,只要你想要。 –

+5

我通常嘗試避免在構造函數中使用非私有方法,因爲它們可以在派生類中被重寫,並且在超級構造函數而不是原始方法中使用。 – Pshemo

+1

遵循java命名約定。 –

回答

2

我會使用第一種選擇,因爲你可以在setColor()有一個驗證。

+0

也許你應該在實例化對象時應用驗證= \(這會引發爭議......) –

2

第一種方式更直觀,更經常顯示。即如下所示:

public car(Color carColor) 
{ 
    this.carColor = carColor; 
} 

它更具可讀性。但兩者都是平等的,所以這是一個風格問題。

請參閱本太:Should I initialize variable within constructor or outside constructor

+2

這應該是一個評論而不是答案。 –

+4

@LuiggiMendoza爲什麼?這很容易,可能需要簡單的回答... – dantuch

+0

因爲這是一個個人意見,而不是由事實,參考或特定專業知識支持的答案。 –

1

Class1的,我想。 Getter和Setter方法通常是必需的,但它是構造函數初始化該對象的變量的工作。

1

如果我在設置變量前需要做很多計算,我會在一個單獨的方法中完成,否則,我會選擇第一種方法。

public car(Color carColor) 
{ 
    setColor(carColor); 
} 

public void setColor(Color carColor) 
{ 
    Color res; 
    //Many calculations 
    //.. 
    //.. 
    //finally 
    this.carColor = res; 
} 

但如果我只是想設置的話,我會簡單:

public car(Color carColor) 
{ 
    this.carColor = carColor; 
} 
相關問題