6

インスタンス変数に直接アクセスする代わりに、クラスの内部コードでゲッター/セッターを使用することは、良い習慣ですか、悪い習慣ですか?少なくともセッターの場合、値を検証するコードを追加することはできますが、ゲッターの場合、それは単なるオーバーヘッドですか?ゲッター/セッターが値を直接設定/取得するだけの場合、Javaコンパイラーはどれほどインテリジェントですか?Javaはコードを最適化し、インスタンス変数への直接アクセスによってゲッター/セッターを置き換えます。したがって、メソッド呼び出しのオーバーヘッドはありませんか?

4

3 に答える 3

7

それらのゲッター/セッターで追加の操作を実行したい場合を除いて、クラス内でそれを行う必要はありません。クラスメンバーへのアクセスは、次のように、内部でクラスに直接アクセスできます。

  • 非表示にする理由は、主に実装を非表示にするためです(そして、クラス自体から実装を非表示にする必要はありません)
  • ゲッターとセッターはメンバーに直接アクセスするので、メンバーに直接アクセスしないようにするためだけにそれらを呼び出すことは、いくぶん、うーん...冗長です。

パフォーマンスに関して-私は正直に言って、ほとんどの場合、それについて考える必要はありません。メソッドを呼び出すか、直接アクセスするかは、さらにナノ秒かかるかどうかではなく、読みやすさ、スケーラビリティ、およびメンテナンスの観点から決定する必要があります。か否か。このアプローチは、長期的に見れば成果を上げます。最適化の場所があり、効率的である必要がありますが、コードベースが20行を超えると、コードを明確で保守しやすい状態に保つことがはるかに重要になります。

于 2012-05-12T18:14:55.627 に答える
7

フィールドに直接アクセスするのがより一般的です。setFieldNameメソッドの値は、他のクラスでコードを使用しているプログラマーにとってより明白です。実装の詳細が隠されていると、許容できる値の範囲がわからない可能性があるため、フィールドを非公開にして、他の開発者にセッターを強制的に実行させるのは理にかなっています。しかし、あなた自身のクラスの中で、セッターを使用する場合ははるかに弱いです。Java APIのソースを見ると、getter/setterメソッドは通常クラス内で使用されていないことがわかります。

于 2012-05-12T18:23:26.077 に答える
1

直接アクセスするのは良いことです。ただし、同じクラス内では、ゲッター/セッターのアクセスが悪いとは誰も言えません。Java Beanを開発している場合は、私が言っていることを確実に理解できます。JTextFieldのユーザー入力を文字列として取得しようとしていると考えてください。この場合、getterメソッドを使用すると、文字列の切り捨て、トリム、大文字、小文字など、さまざまなことができます。直接変数にアクセスするだけでこれをすべて実行しようとしている場合(例:String s = textField.getText ())、あなたはそれをするのが非常に難しいことに気付くでしょう。ですから、私が思うに、良いか悪いかは状況とあなたが開発しているものに依存します

于 2012-05-12T19:29:17.007 に答える