2012-05-12 4 views
4

インスタンス変数に直接アクセスするのではなく、クラスの内部コードでゲッター/セッターを使用するのは良いか悪いのですか?少なくともセッターの場合、値を検証するコードを追加することができますが、ゲッターにとってはオーバーヘッドです。 Javaコンパイラは、getter/setterが値を直接設定/取得するだけでJavaがコードを最適化し、getters/setterをインスタンス変数に直接アクセスすることで置き換えるので、オーバーヘッドを呼び出すメソッドはありません。クラス内のゲッター/セッターの使用 - 良いか悪いのか?

+0

可能な複製http://stackoverflow.com/questions/1568091/why-use-getters-and-setters –

+0

あなたの質問の後半では、現代のJVMは必要に応じてgetters/setterをインライン展開します。 – casablanca

+6

@edalorzo - これは重複していません。ここでの質問は、クラスメンバーの内部使用についてです。 – MByD

答えて

5

フィールドに直接アクセスする方が一般的です。 setFieldNameメソッドの値は、他のクラスでコードを使用しているプログラマにとってより明らかです。実装の詳細が隠されていると、受け入れ可能な値の範囲が分からないことがあるため、フィールドを非公開にして他の開発者にセッターを強制的に渡すように指示します。しかし、自分のクラスの中では、セッターを使用するケースははるかに弱いです。 Java APIのソースを見ると、getter/setterメソッドは一般にクラス内で使用されないことがわかります。

+1

このトピックについて間違った答えはありませんが、私はJavaのapiの例が気に入っています。この答えを選択しました。これと他のものに感謝します! –

7

これらのゲッター/セッターで追加の操作を実行しない限り、クラス内で行う必要はありません。 としてクラスメンバへのアクセスは、内部クラスに直接することができ:隠れた理由は、実装を隠すために主にある

  • (およびクラス自体から実装を隠す必要はありません)
  • ゲッターとセッターはメンバーに直接アクセスするので、アクセスを避けるためにメンバーに直接呼び出すと、メンバーは直接、多少、冗長です...冗長です。パフォーマンスに関しては

- 私は正直にあなたがいないかどうかという点で、読みやすさ、拡張性やメンテナンスの面で、直接法またはアクセスを呼び出すかどうかを決定する必要があり、ほとんどの場合、あなたはそれについて考えるべきではないということだと思いますもう1秒かかりますか?このアプローチは長期的に実現します。最適化の場がありますが、コードベースが20行以上になると効率的ですが、コードを明確かつ維持可能に保つことがより重要になります。

1

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

関連する問題