[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
2022-03-15 10:11:06
質問
これらの変数に単純にパブリック・フィールドを使用する代わりに、取得と設定のみを行うゲッターとセッターを使用する利点は何でしょうか?
もしゲッターとセッターが単純なget/set以上のことをすることがあれば、私はすぐにこれを理解することができますが、どのようにすればよいのか100%明確ではありません。
public String foo;
が少しでも悪いと
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
一方、前者は定型的なコードが少なくて済みます。
解決方法は?
実際にあるのは 多くの正当な理由 アクセサを使用することを検討する クラスのフィールドを直接公開するよりも、カプセル化の議論や将来の変更のしやすさだけでなく。
以下は、私が認識している理由の一部です。
- プロパティの取得または設定に関連する動作のカプセル化 - これは、追加機能(検証など)をより簡単に後で追加することを可能にします。
- プロパティの内部表現を隠し、別の表現を使ってプロパティを公開する。
- パブリック・インターフェースを変更から隔離する - 既存のコンシューマに影響を与えることなく、実装が変更されてもパブリック・インターフェースを一定に保つことができるようにする。
- プロパティの寿命とメモリ管理(廃棄)セマンティクスの制御 - 非管理型メモリ環境(C++やObjective-Cなど)では特に重要です。
- 実行時にプロパティが変更されたときのデバッグ用インターセプトポイントを提供する - プロパティがいつ、どこで特定の値に変更されたかをデバッグすることは、言語によってはこれがないと非常に困難である。
- プロパティ・ゲッター/セッターに対して操作するように設計されたライブラリとの相互運用性を向上させました - モッキング、シリアライゼーション、WPFが思い浮かびます。
- ゲッター/セッターメソッドをオーバーライドすることで、継承者がプロパティの動作と公開方法のセマンティクスを変更できるようにします。
- ゲッター/セッターを値ではなくラムダ式で渡せるようにする。
- ゲッターとセッターは、異なるアクセスレベルを許可することができます。例えば、ゲットはパブリックですが、セットはプロテクトされている可能性があります。
関連
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
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 のエラーです。未解決のコンパイル問題 解決方法
-
final, finally, finalizeの違いについて話してください。
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
プロローグでのコンテンツは禁止されています
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
テストが見つかりませんでした
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
[解決済み】ゲッターとセッターは設計が悪いのか?矛盾するアドバイスが見受けられる【重複あり
-
[解決済み] .NETのゲッター宣言とセッター宣言【重複】について