2011-12-07 1 views
2

クラスの「メンバ変数」/フィールドにアクセスする必要がある場合は、直接アクセスするかゲッターとセッターを呼び出すことをお勧めしますか?なぜ?クラスのフィールドにアクセスするときのよい練習

+0

これを読んで、「なぜ?」と答えます。部。 http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – RCE

答えて

3

は、私はあなたのフィールドはプライベート作るのほとんど唯一の利点を参照して唯一のゲッターとセッターおそらく

  • アクセス制御を通じたアクセスを提供します。読み取りアクセスのみを提供したい場合、または書き込みアクセスのみを行う場合は、ゲッター/セッター
  • を使用して達成することができます。PropertyChangeEventsをBeanプロパティに記録する場合は、このコードを設定者に含めることができます。それ以外の場合は、このフィールドを直接変更するすべての呼び出しが変更イベントをトリガーする必要があります。
  • フィールドを変更するのは私のIDEで簡単に見つけることができます。フィールドへの唯一の直接アクセスはクラス内にあり(プライベートフィールドなので)、外部の変更はすべてセッターを経由します。これは、フィールドのウォッチポイントにフィールドの変更はセッターをオーバーライドすることができたときに、余分な何かをしたい
  • サブクラスを使用するより速くデバッグを可能にし、を呼び出し、何か余分な

私が考えることができる唯一の可能な欠点を行います(getterとsetterのために)書くためにはもう少しコードが必要で、クラスの外からフィールドにアクセスするためのコードはもう少し必要です。 link1link2

3

直接アクセスするのではなく、setter/getterを呼び出します。そうすれば、セッター/ゲッターに余分に必要なコードが実行されます。

0

それは呼び出し元のクラスのメンバーである場合、それを直接アクセスします。しかし、現在のIDEでこれはかなりラメ言い訳

いくつかの余分な文献があります。それ以外の場合は、getter/setterメソッドを使用します。

なぜですか?呼び出し側のクラスが独自のメンバーにアクセスできるように、getter/setterメソッドを作成しないでください。それ以外の場合は、他の人が詳しく述べた理由でゲッター/セッターメソッドを使うべきです。

2

ゲッター/セッターでは、遅延のあるインスタンス化が可能です。さらに、この方法で変数へのアクセスを制御することができます(自分自身でも、APIの一部としても公開することができます)。初期化の実装を隠す能力なども非常に重要です。

私の意見では、S/Gの最大の利点は、誰かがあなたのコントロールなしにそれを変更するリスクが減少することです。小さな例です。ゲッターが元のものではなくオリジナルのcopyを与えるかもしれないと考えてください。

利点は複数あり、選択肢がある場合は、データカプセル化と制御の利点のためにsetter/getterを選択します。

関連する問題