[英]Overriding equals method
所以我有这样的设置:
interface A{
}
class B implements A{
public int hashCode() {
...
}
public boolean equals(final Object obj) {
...
}
}
class C implements A{
public int hashCode() {
...
}
public boolean equals(final Object obj) {
...
}
}
class D{
List<A> list = new ArrayList<A>();
}
我想为类D实现一个重写的equals
方法,该方法测试列表是否相等,但是由于某种原因,每当我尝试实现该方法时,就这样:
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final D other = (D) obj;
if (values == null) {
if (other.values != null)
return false;
}else if (!values.equals(other.values))
return false;
return true;
}
但是我相信这会在调用values.equals(other.values)
情况下调用Object
的equals
方法,因为它的行为不正确。
如何使D
的equals
方法正确运行?
equals()
是属于Object
类的预定义方法。 请记住,java是面向对象的编程语言,这意味着equals()
方法隐式适用于每个java类。 您尚未使用预定义的方法名称作为自定义方法。
为了模拟equals()
您需要更改签名,像这样,
public boolean equals_simulation(final Object obj) {
...
}
如果您使用的是Eclipse之类的IDE,并且不需要实现自定义规则来实现相等性,则可以让Eclipse为您实现该方法。 只需查找“覆盖等于和hashCode”选项。 它应位于“源”或“源>重构”下。
实际上,您需要覆盖等式,以便您在实际列表之间定义比较因子。
如果使用Maven进行依赖项管理,则可以在此处找到Apache Commons Lang3,其中包含一个名为EqualsBuilder的便捷类,对于重写equals方法非常有用。
您的最后一次比较应使用Arrays.equals(list, ((D)other).list)
比较所有数组元素。 VSequence
实际上是D
吗? 然后,您可以将演员表放到D
equals
方法可从Object
类获得。 因此,它在所有具体的Java类中都可用。 equals方法的签名为public boolean equals(Object equals)
。
同样, equals
方法应与hashcode
方法协同工作以检查相等性。 其强大的确认方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.