は、私は次の形式のモデルクラスを持っている:私のequals/hashCodeメソッドはオブジェクトIDより多くを調べるべきですか?私のアプリケーションで
class Book
{
private int ID;
private String title;
//other code
}
は今、私の質問は2つの一部です:
はイコール()メソッドの以下の良い実装ですか?
public boolean equals(Object o) { if(o == null) { return false; } if(!(o instanceof Book)) { return false; } Book other = (Book)o; if(o.getID() == ID) { return true; } return false; }
私はイコール()の実装は、主に私の アプリケーションのビジネスロジックに依存していることを知っています。しかし、2つの書籍のIDが同じ場合、 は理想的には同じ本でなければなりません。したがって、 については、他の値フィールドと同等かどうかをチェックするかどうか混乱します。 [タイトル、価格など]。
が、これはのhashCode()メソッドの良い実装です:
public int hashCode() { return ID; }
私の考えは異なる本が異なるIDを持っていますし、 2冊は、彼らが等しい同じIDを持っている場合ということです。したがって、上記の の実装は、私のアプリケーションの コンテキストでのハッシュコードの適切な配布を保証します。
if(o.getID() == ID)
ID
はInteger
オブジェクトではなく、原始的である:
このクラスをHibernateまたはJPAで使用しますか? – Ralph
ほとんどの場合、休止状態です。何か違いはありますか? – user801138