0

重複の可能性:
ゲッターとセッターは悪ですか?

値を直接処理する以外に何もしない getter と setter を持つプライベート変数を持つことの背後にある論理的な理由は、パブリック変数を持つことよりも望ましいとは言えません。

何か不足していますか?

4

7 に答える 7

5

なぜなら、

検証が理由の 1 つです。フィールド名をパブリック API から除外することで、後で API を壊さずに変更することもできます。また、後で他の方法でクラスを変更することもできます。たとえば、フィールドを他のクラスに移動する (パブリック セッターが別のクラスのセッターを呼び出すようにするため)。セッターを呼び出すと、他のことを行うこともできます。たとえば、関心のある他のコンポーネントに値の変更を通知することができます。フィールドが直接アクセスされた場合、これは不可能です。

于 2012-07-25T06:37:10.253 に答える
2

それらは、コードの将来を証明するために好まれます。将来、変数を削除するか、別の変数を使用してこの変数の値を導出する場合、変更はより簡単です。getter/setter を変更するだけで、残りのコードは影響を受けません。これは、変数への直接アクセスには当てはまりません。

于 2012-07-25T06:37:47.293 に答える
1

@ user370305 が既に述べたように、1 つの理由は検証です。他の理由は型変換です。セッターは文字列を受け取り、それを整数に解析できます。もう 1 つの理由は、データのカプセル化です。単純なフィールドを同じクラスに格納する必要はありません。setName(String)クラスのメソッドはPerson、名前をより複雑なデータ構造に格納する場合があります。Person単純なフィールドを使用しても、それを使用するコードに影響を与えずにクラスの内部実装を変更することはできません。

編集:さらに別の技術的な理由。ゲッターとセッターを使用すると、コードの検出とデバッグがはるかに簡単になります。一部のフィールドが予期せず変更された場合、ブレークポイントを適切なセッターに切り替えるだけで、問題をすばやく見つけることができます。このフィールドがパブリックで、このフィールドへの参照が 1000 ある場合、理論的には、これらすべての場所に 1000 個のブレークポイントを配置する必要があります。

于 2012-07-25T06:40:48.480 に答える
1

1. さまざまなコンテキストでさまざまな用途がありEncapsulationます。変化し続ける同様の動作では、抽象クラスまたはインターフェイスにカプセル化する必要がありますdesign patterns

2.private instance variablepublic getter setterはb

3.主にユーザーからの入力を検証するために行われます...値をインスタンス変数に直接設定することは危険です。

例えば:

int dogAge;

       System.out.println("My dogs age is :"+dogAge);

では、誰かが負の年齢を与えたらどうなるでしょうか...?

だから、こうしなければならない…

int dogAge;

      public void setAge(int age){

       if (age>0){
         dogAge = age;
        }
       else{

              System.out.println("Not a valid age");
           }

     }

     public int getAge(){


        return dogAge;

      }

    System.out.println("My dog age is :"+ getAge());
于 2012-07-25T06:44:28.890 に答える
0

その単純な..それらの変数を公開すると、それらに任意の値を追加する権利が与えられます。しかし、ゲッターまたはセッターを介してそれを行うと...チェックを入れて、エンドユーザーに知らせることなく入力または変換を制御できます

例:

getName(){
  return firstName+lastName;
}

また

 getData(){
  // code to convert byte to Mb or whatever you like to represent
 }
于 2012-07-25T06:39:37.680 に答える
0

accessorsフィールド変数への直接アクセスを制限するために を使用することは、 を使用するよりも推奨されますが、public fieldsこれはgetters and setter for each and every field is overkillお勧めできません。ただし、状況にもよりますが、ダムデータオブジェクトが必要な場合もあります。Accessors本当に必要なフィールドに追加する必要があります。Getter Setter: To Use or Not to Useの詳細については、このリンクを参照してください。

于 2012-07-25T06:43:26.300 に答える
-1

値を直接処理する以外に何もしないゲッターとセッターを備えたプライベート変数を持つことの背後にある論理的な理由を見つけることができません。

ゲッターとセッターにコードを追加すると、複雑さが増し、テストも必要になることを考慮してください。ユーザーが完全に制御する小さなシステムの場合、getter と setter を使用してもほとんどメリットがない場合があります。あなたの専門的な判断を使用してください。将来の証明や追加の複雑さは必要ないかもしれません。または、ダイレクト アクセスの効率性とシンプルさのほうが重要かもしれません。

個人的には、ゲッターとセッターは使いすぎだと思います。自分で完全に制御できる小規模なシステムの場合、直接アクセスが適している場合があります。

于 2012-07-25T06:56:02.187 に答える