Nac*_*321 3 java apache equals hashcode
我有2个POJO看起来像这样
public class Element{
private String name;
private int number;
//GETTERS AND SETTERS
}
public class Container{
private String subject;
private String email;
private List<Element> elements;
//GETTERS AND SETTERS
}
Run Code Online (Sandbox Code Playgroud)
我需要验证两个Container对象是否相同.我看了一下,发现apache commons有HashCodeBuilder和EqualsBuilder,它们有助于覆盖这些方法.我们的想法是,这些构建器方法使用Object中的所有元素来确定HashCode和两个对象的相等性.问题是,如果你看到示例代码,它看起来像这样:
public boolean equals(Object obj) {
if (obj == null) { return false; }
if (obj == this) { return true; }
if (obj.getClass() != getClass()) {
return false;
}
MyClass rhs = (MyClass) obj;
return new EqualsBuilder()
.appendSuper(super.equals(obj))
.append(field1, rhs.field1)
.append(field2, rhs.field2)
.append(field3, rhs.field3)
.isEquals();
}
Run Code Online (Sandbox Code Playgroud)
我该List<Element> elements怎么追加?我是否需要创建另一个方法来将整个List解析为字符串以使其工作?谢谢!
小智 6
精简版:
是的,你可以使用append的方法EqualsBuilder和HashCodeBuilder.
长版:
该List.equals(Object)方法比较列表中的所有元素.请参阅javadoc
将指定对象与此列表进行比较以获得相等性.当且仅当指定的对象也是列表时,返回true,两个列表具有相同的大小,并且两个列表中的所有对应元素对都相等.(如果(e1 == null?e2 == null:e1.equals(e2)),则两个元素e1和e2相等.)换句话说,如果两个列表包含相同顺序的相同元素,则它们被定义为相等.此定义确保equals方法在List接口的不同实现中正常工作.
所以你可以用它append(elements, rhs.elements)来比较列表.
在List.hashCode()也使用的元素的哈希码,所以也可以使用append的方法HashCodeBuilder.在javadoc中说:
返回此列表的哈希码值.列表的哈希码被定义为以下计算的结果:
Run Code Online (Sandbox Code Playgroud)int hashCode = 1; for (E e : list) hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |