EqualsBuilderとHashCodeBuilderを使用してハッシュコードと同等のメソッドを生成する

自動化されたhashCode()およびequals()の

  問題:hashCode()およびequals()メソッド

  ソリューションを自動的に実装する必要がある場合:EqualsBuilderを

  使用し、HashCodeBuilderで例を使用します。

import org.apache.commons.lang.builder.HashCodeBuilder; 
import org.apache.commons.lang.builder.EqualsBuilder; 

public class PoliticalCandidate { 
    // Member variables - omitted for brevity 
    // Constructors - omitted for brevity 
    // get/set methods - omitted for brevity 
    // A hashCode which creates a hash from the two unique identifiers 

    public int hashCode( ) { 
        return new HashCodeBuilder(17, 37) 
                       .append(firstName) 
                       .append(lastName).toHashCode( ); 
    } 

    // An equals which compares two unique identifiers 
    public boolean equals(Object o) { 
        boolean equals = false; 
        if ( o != null &&PoliticalCandidate.class.isAssignableFrom(o) ) { 
            PoliticalCandidate pc = (PoliticalCandidate) o; 
            equals = (new EqualsBuilder( ) 
                       .append(firstName, ps.firstName) 
                       .append(lastName, ps.lastName)).isEquals( ); 
        } 
        return equals; 
    } 

} 


ディスカッション:

1.上記の例では、firstnameとlastnameが同じ場合、2つのオブジェクトのhashCodeは同じであるため、equals()はtrueを返します

。hashCodeがクラスのすべてのフィールドに依存している場合は、リフレクションメカニズムを使用して、 hashCode。

public int hashCode( ) { 
    return HashCodeBuilder.reflectionHashCode(this); 
} 


ToStringBuilderやHashCodeBuilderと同様に、EqualsBuilderも設定にappend()メソッドを使用します。EqualsBuilderのappend()メソッドは、基本的な型、オブジェクト、配列をパラメーターとして受け入れることができます。EqualsBuilderの優れた点は、配列をパラメーターとしてappend()メソッドに直接渡すことができることです。EqualsBuilderは、配列内の各要素を順番に比較します。

2.各属性値が等しい場合に限り、2つのオブジェクトが等しい場合、この文は次のコードで実現できます。

public boolean equals(Object o) { 
    return EqualsBuilder.reflectionEquals(this, o); 
}
元の記事を65件公開 16のように 10,000以上を訪問

おすすめ

転載: blog.csdn.net/s_156/article/details/105417194