hashCode と equals を簡単に実装

Java クラスの hashCode と equals メソッドを手書きするのは、結構面倒くさい。
IDE Eclipse で自動生成してもいいけど、毎回、各々これで書くのもなんだか。。。

Apache の commons-lang3 にある hashCode と equals のビルダーを使うと、
書く量も少なくて良いかも。
http://commons.apache.org/proper/commons-lang/
インポート

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

記述

@Override
public int hashCode(){
   return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj){
   return EqualsBuilder.reflectionEquals(this, obj);
}

これを使う利点は、DTO 等の基底クラスで、これを書いて基底クラスを
継承させると効果が引き継がれることだ。

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
/**
 * BaseDto
 */
public class BaseDto{
   @Override
   public int hashCode(){
      return HashCodeBuilder.reflectionHashCode(this);
   }
   @Override
   public boolean equals(Object obj){
      return EqualsBuilder.reflectionEquals(this, obj);
   }
}

これを、、、

public class Foo extends BaseDto {

とするだけで、equals と hashCode は機能する。HashSet の add を実行して試してみればわかる。

沢山 DTO クラスの記述が必要で equals と hashCode メソッド実装の必要性があるなら
便利な方法であろう。