11

equals(Object obj)クラスの関数を書いています。obj呼び出し元からのプライベート フィールドにアクセスできることがわかりました。したがって、ゲッターを使用する代わりに:

Odp other = (Odp) obj;
if (! other.getCollection().contains(ftw)) {

}

フィールドに直接アクセスできます:

Odp other = (Odp) obj;
if (! other.collection.contains(ftw)) {

}

これは悪い習慣ですか?

4

6 に答える 6

9

ゲッターは単なる「return(foo)」ではない場合があるため、私は常にゲッターを使用する傾向があります。場合によっては、null の場合は初期化するか、デバッグ ログが含まれているか、現在の状態を何らかの方法で検証します。より一貫性があります。

于 2009-10-10T19:46:44.223 に答える
6

いいえ、ちがいます。プライベート変数とメソッドが他のクラスからアクセスできない理由は、クラスを使用するすべてのコードを変更することなく、クラスの内部を変更できるようにするためです (また、クラスのユーザーが変数を設定するなどのことを防ぐためです)。本来あるべきではない値に)。

クラスの内部を再構築する場合は、とにかくクラス内のコードを変更する必要があるため、何も害を及ぼさない他のオブジェクトのプライベート変数を使用する場合。

于 2009-10-10T19:49:59.787 に答える
5

これは悪い習慣だとは思いませんが、言語の機能です。equalsやり方をテストできるだけでなく、オブジェクト作成のプロトタイプ パターンにも役立ちます。

于 2009-10-10T19:53:23.117 に答える
1

それは問題なく、完全に正常です。thisが のプライベート フィールドをいじることができると考えるのは少し奇妙ですが、第三者がオブジェクトの内部をいじるotherことができる限り、悪いことが起こる可能性はまったくないので問題ありません。Odpクラスの任意のメソッドは、Odp任意のOdpオブジェクトの非公開メンバーを変更できますthisが、そのようなメソッドは明らかに信頼できるため、問題ありません。

于 2009-10-10T19:48:42.317 に答える
0

エンティティ クラスにプライベート メンバーを使用すると、プロキシ クラスが正しく動作しない場合がありました。hibernate が遅延クエリによってクラスを作成することを想像してみてください。メンバー変数をチェックすると、null が返されます。しかし、 get() を呼び出すと、データベースからデータが取得され、フィールドが初期化されます。

于 2012-11-02T07:43:06.927 に答える