7

一意のId属性を持つDBエントリを表すクラスがあります。この属性のみに基づいてメソッドequals()とメソッドを実装しても問題ありませんhashcode()

  @Override public int hashCode()
  { return id;
  }

  @Override public boolean equals(Object obj)
  {
    if (this == obj)                  return true;
    if (obj == null)                  return false;
    if (getClass() != obj.getClass()) return false;
    Task other = (Task) obj;
    if (id != other.id)
      return false;
    return true;
  }
4

3 に答える 3

2

一般的に、はい。すべてのIDが小さい連続した整数である場合、使用可能な32ビット全体にビットをより広く分散させる関数を使用することで、大きなコレクションからより良いパフォーマンスを得ることができます。しかし、これは他の方法でうまくいくはずです。

于 2013-03-15T15:56:19.667 に答える
1

このコードに問題はありません。ただし、熟考したい質問がいくつかあります。

  • 同じオブジェクトを複数持つことはできますidか?
  • クラスがサブクラス化されることはありますか?
于 2013-03-15T15:56:49.400 に答える
0

あなたはあなたのコメントでクラスが最終的であると言いました、そして私はInteger.equalsのように等しいデザインを提案します

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
于 2013-03-15T16:22:15.993 に答える