2012-01-24 7 views
18

ゲッターメソッドとセッターメソッドがプライベートであると宣言されたコードを見ました。私はそれの背後にある論理を理解しようとしています。なぜあなたはそれらを非公開と宣言しますか?これはゲッターやセッターを通して達成しようとしていることとまったく逆です。なぜゲッターとセッターメソッドをプライベートと宣言しますか?

答えて

11

私はいくつかの理由を考えることができます:

  • あなたは将来の公共のアクセスを防止します。

異なるプログラマがコードを見て変数にアクセスしたいが、セッターとゲッターがない場合、彼はあなたがちょっと忘れてしまったと思うかもしれません。しかし、privateと宣言した場合は、と言っています。これらの変数を外部から変更またはアクセスしないようにします。

  • あなたが設定し、他のアクション

となっ関連付けるあなたがpublicアクセサをしたくないと言います。しかし、プライベート変数が何回変更されたかを知りたいかもしれません。変数にアクセスするたびにカウントをインクリメントするのではなく、セッターを使用する方が簡単です。

  • あなたは再び中央アクセスポイント

をしたい、あなたはpublicアクセスを必要はありませんが、デバッグ中に、あなたはprivateメンバーが変更されたすべての場所にブレークポイントを置きたいかもしれません。そのため、クラス内のどこにでもブレークポイントを設定するのではなく、アクセッサにブレークポイントを設定するだけです。

8

ゲッターとセッターで達成しようとしていることとまったく同じです。

実際にはありません。 getterとsetterを宣言する理由は、フィールドを非表示にするためです。これは、不要な結合を避けるために行われます。すなわち、APIの実装の詳細に応じてAPIのクライアントである。 (そのカップリングは、いくつかの理由で問題になる可能性があります。)プライベートゲッターとセッターを作る理由は、オブジェクトの抽象状態の対応する部分をプライベートにすることです。それは、ゲッターとセッターを使用するかどうかを決定するのに、がほとんど独立しているです。

getterとsetterを使用するケースはプライベート状態ほど強力ではありませんが、まだ具体的なメリットがあります。例:

  • ゲッター/セッターメソッドは、余分な動作またはエラーチェックコードを追加する場所を提供します。

  • また、デバッグコードを追加したり、テストコードを注入する場所(ユニットテスト用)を提供します。

  • ゲッターとセッターはオーバーライドできます。あなたはフィールド(プライベートかどうか)でそれをすることはできません。

関連する問題