ゲッターとセッターのポイントは何ですか?[重複]
2023-09-16 10:41:55
質問
重複の可能性があります。
なぜゲッターとセッターを使うのですか?
などの変数にはセッターやゲッターを作ると良い、とJavaの本で読んだことがあります。
x
と
y
. 例えば
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";
フィールドは変更できないので、フィールドへのアクセスを許可します。例えば、変数はゲッター、セッターで配置します。
- もう一つのシナリオは、クラスを不変にしたい場合です。フィールドアクセスを許可すると、値が変更される可能性があるため、クラスの不変性を壊してしまうことになります。しかし、もしあなたが慎重にゲッターとセッターなしでクラスを設計すれば、不変性をそのまま維持することができます。
しかし、そのような場合、オブジェクトの参照を与えないようにゲッターメソッドに注意する必要があります(クラスがインスタンスとしてオブジェクトを持っている場合)。
ゲッターとセッターを使って、どのパッケージでもプライベート変数を使うことができます。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
java.sql.SQLException: 結果セットの開始前
-
コンストラクタDate()が未定義である問題
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java の switch case 文で必要な定数式の問題の解決法
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
シェルコマンドやスクリプトのJavaコール
-
配列定数は初期化子でのみ使用可能です。
-
Java基礎編 - オブジェクト指向
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
Zipファイルの圧縮・解凍にantを使用する
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?