2012-03-23 11 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) 
} 

正しい方法は何ですか。 I soption 1 OKまたはオプション2?あなたがそれらのアクセサメソッドにいくつかの処理をカプセル化することができますので、

+0

彼らはすべて私に見える... – joshuahealy

+0

質問をdownvoteに大きな衝動に抵抗し、私は言いたい、ゲッターとセッターを使用する必要があります。 –

+0

しかし、セッターメソッドが単に値を設定する以外のことをした場合(例えば、 'BFieldChangedEvent'などが発生する可能性があります)、セッターを使用しない方がいいでしょう。 – joshuahealy

答えて

3

3のどれでしょうもちろん、仕事。

インスタンスメンバーと引数を区別しない限り、一般的にはオプション1は好きではありません。たとえば、public void buildList(String bfield) { this.bfield = bfield; }です。 this.everythingは余分なノイズです。あなたがそれを必要としないならば、バグにはもっと多くのコードを隠すためのコードが必要です。:)

オプション2は、将来的にはさらに優れています。もし何かを変更してbfieldと一緒に設定しなければならない場合(あるいは、bfieldにはバッキングフィールドが全く必要ない場合 - たとえば、サブオブジェクトに何かを設定する必要がある場合など)は、あなたがsetBfieldと呼ばれてうれしく思う - bfieldを設定するコードを変更するダースの場所がないので。基本的に、setBfieldメソッドが必要な場合は、それを使用することをお勧めします。

あなたが知っているフィールドが常にオブジェクト自体に含まれ、他のフィールドとは独立している場合、オプション3は通常より高速です。さらに、外部コードでbfieldも設定できないようにするには、セッターを作成する必要はありません(読んでください:インターフェイスを汚染する)。

-2

eclipseを使用してください!それはあなたのためにいくつかの仕事をしましょう。 クラスを作成するこのようなテスト。

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

し、これらのん:

  • 右クリック - > 'ソース' を選択 - >コンストラクタ
  • を生成し、右クリック - > 'ソース' を選択 - >フィールド
  • でコンストラクタを生成右クリック→「ソース」→「ゲッター/セッターの生成」

完了:)を実行して、Java Beanのコンベンションを検索します。あなたのコードは、任意のJavaエキスパートデベロッパを驚かせるだろう! :)

+0

ありがとうございます。私はゲッターとセッターズと一緒に行くつもりですが、同時に私には手を貸してください - もし私がこれら2つの変数を完成させたら、明快さの観点から、{this.aField == this.bField}と言うのがより理にかなっていると思います。私が間違っているなら、私を訂正してください。 – Peter

+0

@Peter: 'afield'と' bfield'がローカル(または引数)でない場合は、あまり明確ではありません。それはちょうどノイズです。 – cHao

関連する問題