是否有任何库,给定任何java类的两个对象会准确地说它们是否相等? (该类可能没有定义hashCode)
否则有任何简单的方法来实现它吗?
答案 0 :(得分:2)
您可以使用提供reflectionEquals(a,b)
方法的Apache Commons'EqualsBuilder
。
但在大多数情况下,最好自己实施equals
和hashCode
(请注意,通过合同,您应该始终覆盖两者)。
请注意,大多数集合都依赖于equals
和hashCode
才能正确实现,但如果您有一个共同的超类,那么您可能会覆盖那样:
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
注意:请注意反射会增加一些性能开销,因此大量使用这些方法可能并不明智。
答案 1 :(得分:1)
恕我直言,没有库可以检查两个对象是否相等(因为相等应该由你定义)。
你需要override equals
method并在里面实现你的逻辑。
@Override
public boolean equals(Object other){
//your logic
}
该类可能没有定义hashCode
请注意该声明,当您使用/处理收藏集时,您最终会得到惊喜结果,因为您没有覆盖hashcode
方法。
小心equals and override contract
每当a.equals(b),a.hashCode()必须与b.hashCode()相同。
答案 2 :(得分:0)
您必须覆盖equals()
和hashCode()
方法。
你不想担心这个。您可以编写对象类并使用IDE
生成这些方法。
答案 3 :(得分:0)
您需要覆盖自定义类的equals()
和hashCode()
方法。
equals()
内部的默认实现只是==比较。这意味着它只会检查您比较的两个引用是否都指向同一个对象。如果您还要比较其中的实际数据,则除了覆盖它以添加比较逻辑之外别无选择。
答案 4 :(得分:0)
您可以使用XMLEncoder并查看两个对象是否以相同的方式编码。这假设您有吸气剂和固定剂。有了正确的equals()并不是很难,因为你可以使用IDE生成它。
答案 5 :(得分:0)
您可以使用commons-lang中的EqualsBuilder。 http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/builder/EqualsBuilder.html#reflectionEquals%28java.lang.Object,%20java.lang.Object%29
reflectionEquals方法将检查对象中的每个字段是否与其他对象相等。它正在使用反射。如果你没有实现equals(),那么它只是检查引用。仍然建议实现equals()和hashCode()。
答案 6 :(得分:0)