4

コンストラクターの仕事がフィールドを設定することであり、その後は設定も変更もされないオブジェクトがあります。しかし、私は彼らのためにゲッターが必要です。次に、「万が一に備えて」使用することはないのに、セッターが必要ですか、それとも、コンストラクターに値を設定したままにして、セッターを削除してゲッターを残すことができますか?

4

6 に答える 6

2

Java Beanの仕様によれば、getterメソッドまたはsetterメソッドを省略することは合法です。そのため、使用しない場合はセッターを安全に省略できます

于 2013-01-20T19:13:10.240 に答える
2

コンストラクターがフィールドを設定していて、フィールドを変更する必要がない場合、フィールドは不変のように聞こえます。

私はそれらを最終的にして、それからただゲッターを持っているでしょう。

ファイナルを省略すると、将来誰かがセッターを追加できるようになります。セッターが必要ない場合は、デザインの一部としてこれを適用し、最終フィールドを持つゲテットを用意する必要があります。

これにより、コードを読んでいる人には、設計上不変であることが明示されます。

必要以上のコードを書くという問題もあります。セッターを作成する場合、必要とは思わないため、このコードは完全にテストされていない可能性があるため、バグが発生する可能性があります。

于 2013-01-20T19:19:32.350 に答える
0

オブジェクトプロパティを読み取り専用として使用し、オブジェクトのコンストラクターで初期化する場合は、セッターは必要ありません。このクラスの外部でこのプロパティにアクセスする場合は、そのためのゲッターが必要です。

また、このSOの質問を読むことをお勧めします

于 2013-01-20T19:12:56.510 に答える
0

以下はグーグルの建築家からのものです:

class Foo{

   private int a;
   private int b;

   public Foo(int num1, int num2){
      a= num1;
      b= num2;
   }

   public int getA(){
     return a;
   }

   public int getB(){
     return b;
   }

}

ここでは、セッターは必要ありません。オブジェクトを作成したら。あなたはそれの状態を変えることはできません。

于 2013-01-20T19:13:02.797 に答える
-1

ほとんどの編集者が自動的に追加できるので、あなただけが見ることができるものの場合、それはすべて個人的な選択です。

それが決して変更されるべきではなく、変更された場合に悪いことが起こる可能性がある場合は、セッターがなく、プライベート変数である必要があります。

再利用や他の人との共有を目的として何かを書いている場合は、他の人がAPIで何をする必要があるかわからないので、ゲッターやセッターをどこにでも置いておくことができます。

于 2013-01-20T19:16:11.547 に答える
-1

コンストラクターが何をしているかによると思います。コンストラクターが変数の生の設定を行っているだけの場合は、それらのセッターを含める必要はないと思います。

ただし、コンストラクターコードが変数の値を設定する前に何らかのビジネスロジックを実行している場合は、少なくとも問題の変数(すべてではないにしても)のセッターを作成する必要があると思います。

たとえば、コンストラクタコードがこれを行う場合は、セッターを含めないでください。

public MyClass( String varA, String varB, int varC )
{
  this.varA = varA;
  this.varB = varB;
  this.varC = varC;
}

ただし、コードでこれを行う場合は、ロジックを分離してよりクリーンにするためのセッターを含める必要があります。

public MyClass( String varA, String varB, int varC )
{
  if ( varA == null )
  {
    this.varA = '(empty)';
  }
  else
  {
    this.varA = varA;
  }

  this.varB = varB;

  if ( varC < 0 )
  {
    callSomeMethod();
  }

  this.varC = varC;
}

この種のロジックは、セッターを作成することを保証します。

于 2013-01-20T19:21:24.983 に答える