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 メソッド実装の必要性があるなら
便利な方法であろう。