equalsメソッドとhashCodeメソッドを追加すればよさそうだったので、org.apache.commons
のライブラリを使ったら短くできました。
Hoge.java
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
~~省略~~
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
gradle使ってるなら下記記載。
build.gradle
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
古い記事ばっかだったのでほかも調べたら下記みたいな事でも実現できそうでした。
※試してはいないです
Hoge.java
@Override
public int hashCode(){
return Objects.hash(name, length, children);
}
@Override
public boolean equals(final Object obj){
if(obj instanceof Bean){
final Bean other = (Bean) obj;
return Objects.equals(name, other.name)
&& length == other.length // special handling for primitives
&& Objects.equals(children, other.children);
} else{
return false;
}
}
Objects
はnullチェックでお世話になっていましたが、こんなメソッドもあるのは知らなかったです。
Eclipseの自動生成でもできた気がしますが、個人的には動けばそっちでもいいと思います。