2012-03-23 48 views
0

我剛學,想知道的一段代碼,設置對象變量。Java代碼 - 如何設置對象變量

在下面的測試類中設置對象變量bfield的正確方法是什麼?

public class test { 
private String afield; 

private String bfield; 

public test() { 

buildList(); 

} 

public void buildList() { 

    some code to derive and populate afield. 

    this.bfield = this.afield; // (1) 

    setBfield(afield); // (2) say getter and setters do exist 

    bfield = afield; // (3) 
} 

什麼是正確的做法?我選擇1 OK或選項2?

+0

他們都看起來是正確的我... – joshuahealy 2012-03-23 04:27:15

+0

抵制一個巨大的衝動downvote問題,我不得不說,使用Getter和Setter。 – 2012-03-23 04:27:39

+0

但如果setter方法並不僅僅是設定值以外的東西(例如,它可能會火'BFieldChangedEvent'或類似的東西),那麼你很可能wan't使用二傳手。 – joshuahealy 2012-03-23 04:28:54

回答

3

的三塊會工作,當然。

我通常不喜歡選項1,除非我區分實例成員和參數。例如,public void buildList(String bfield) { this.bfield = bfield; }this.everything是額外的噪音;如果你不需要它,它所做的只是給更多的代碼隱藏更多的代碼。:)

選項2更具前瞻性;如果有的話,你改變的東西,這樣別的東西必須設置連同bfield(或者,如果bfield不需要支持字段都 - 例如,如果將其設置應設置一個子對象的東西),你會很高興你叫setBfield - 因爲你不會有十幾個地方去更改設置bfield的代碼。基本上,如果你需要和已經有一個setBfield方法,我建議在大多數情況下使用它。

如果您有一個您知道的字段將始終包含在該對象本身中,並且獨立於其他字段,則選項3通常會更快。此外,如果您不希望外部代碼也可以設置bfield,則不必創建setter(讀取:污染您的界面)。

3

二傳手/ getter方法更可取的,因爲你可以在這些訪問方法封裝了一些處理過


請參見

-2

使用Eclipse!讓它爲你做一些工作。 創建一個班級像這樣測試。

public class Test { 
    private String afield; 
    private String bfield; 
} 

,然後做這些:

  • 右鍵 - >選擇 '源' - >生成構造
  • 右鍵 - >選擇 '源' - >生成帶有字段構造
  • 右鍵點擊 - >選擇'Source' - > Generate getters/setters

done :)並查找java bean約定。你的代碼會嚇到任何java exp開發者! :)

+0

謝謝大家。我會和Getter和Setter一起去,但是同時讓我說 - 如果我合作了這兩個變量,我認爲從清晰的角度來看,{this.aField == this.bField}會更有意義。請糾正我,如果我錯了。 – Peter 2012-03-23 04:55:07

+0

@Peter:如果'afield'和'bfield'不是局部變量(或參數),那麼它就不會有太大的幫助。那只是噪音。 – cHao 2012-03-23 13:20:12