2012-01-12 8 views
0

私のクラスの1つに対してequalsプロパティをオーバーライドすると、そうすることができますか?このような識別子として問題の性質は、文字列、ブール、日付、セット、またはLinkedHashSetのJavaオブジェクト参照による2つのプロパティの比較

public boolean equals(Object obj) 
{ 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 

    if (!compareProperty(identifier, other.getIdentifier())) return false; 
    //Continue for all properties 
} 

//Compares any two objects 
private boolean compareProperty(Object sourceObject, Object testObject) 
{ 
    if (sourceObject == null) 
    { 
     if (testObject != null) 
      return false; 
    } 
    else if(!sourceObject.equals(testObject)) 
    { 
     return false; 
    } 

    return true; 
} 

それはなぜだろうか?

+0

申し訳ありませんが、私は正しくあなたを得ることができませんでした。 Stringクラスequals()メソッドをオーバーライドすることはできません。最終クラスです。あなたはその動作を変更することはできません。 –

+0

私が不明な場合は、オブジェクトのデフォルトの.equalsメソッドをオーバーライドして、オブジェクトのインスタンスを正しく比較することをお勧めします。 – FooBar

答えて

2

これは実際に実行する必要があります。

私は車輪を再発明しません。 Objects.equals(Java 7)、またはObjects.equal(Guava)またはEqualsBuilder(apache commons-lang)を使用することを検討してください。

+0

これはまさに私が探していたものです。ありがとうございます – FooBar

+2

カスタムクラスのすべてのプロパティを指定する手間を省く唯一のものはEqualsBuilder.reflectionEquals(obj1、obj2)です。他はnullをチェックして、通常のEqualメソッドを使用するだけです。しかし、Reflectionはいつものようにセキュリティチェックアラームを発し、パフォーマンスが遅くなります。あなたがしたように、私は古典的なアプローチに固執します。 –

関連する問題