1. ホーム
  2. java

ゲッターとセッターのポイントは何ですか?[重複]

2023-09-16 10:41:55

質問

重複の可能性があります。

なぜゲッターとセッターを使うのですか?

などの変数にはセッターやゲッターを作ると良い、とJavaの本で読んだことがあります。 xy . 例えば

public int getX(){
    return x;
}

public void setX(int x){
    this.x = x;
}

しかし、それとの違いは何かというと

...(shape.x)...   // Basically getX()

shape.x = 90;    // Basically setX()

セッターとゲッターの方が良い場合、実用上どのような問題が生じるでしょうか?

どのように解決するのか?

複数の理由があります。

  • のようなフィールドアクセスを許可している場合

    shape.x = 90

とすると、今後、データを検証するためのロジックを追加することができません。

のようなセッターを使用した場合、x が 100 より小さくなることはできませんが、そのようなことはできません。

public void setShapeValue(int shapeValue){
  if(shapeValue < 100){
    //do something here like throw exception.
  }
}

  • コピーオンライトのようなロジックを追加することはできません ( CopyOnWriteArrayList )
  • もう一つの理由は、クラスの外のフィールドにアクセスするために、それらをpublic、protectedまたはdefaultとマークしなければならず、その結果、制御ができなくなることです。データがクラス内部で大きく変化する場合 カプセル化 を破り、一般に OOPS の方法論です。

のような定数の場合ですが

public final String SOMETHING = "SOMETHING";

フィールドは変更できないので、フィールドへのアクセスを許可します。例えば、変数はゲッター、セッターで配置します。

  • もう一つのシナリオは、クラスを不変にしたい場合です。フィールドアクセスを許可すると、値が変更される可能性があるため、クラスの不変性を壊してしまうことになります。しかし、もしあなたが慎重にゲッターとセッターなしでクラスを設計すれば、不変性をそのまま維持することができます。

しかし、そのような場合、オブジェクトの参照を与えないようにゲッターメソッドに注意する必要があります(クラスがインスタンスとしてオブジェクトを持っている場合)。

ゲッターとセッターを使って、どのパッケージでもプライベート変数を使うことができます。