[英]Override equals method gives an error
我是一名计算机工程专业的学生,一个星期前开始学习Java
。 这些天来,我一直在研究泛型,我想将其与equals和Overriding混合使用,因此我编写了一个程序,该程序创建了一个具有两个属性(pointX,pointY)的名为“ Punto”的对象,从而可以模拟坐标。 我在主类之外编写了一个静态方法,该方法使用两个“ Puntos”作为参数并等于它们。 这是该方法的代码:
public static boolean iguales(PuntoImpl<Double> p1, PuntoImpl<Double> p2){
return p1.equals(p2);
}
这是我尝试覆盖等于的尝试:
@Override
public boolean equals(final Object obj)
{
if (obj == null || !(obj instanceof PuntoImpl))
return false;
PuntoImpl<T> other = (PuntoImpl<T>) obj;
if (other.puntoX != this.puntoX) return false;
if (other.puntoY != this.puntoY) return false;
return true;
}
我试图在坐标X和坐标Y中等于两个具有相同参数的点,但返回的是假。 您能帮我找到错误吗?
您正在按引用相等性比较Double
值。 我怀疑您是否想要if (!other.puntoX.equals(this.puntoX))
等。我实际上将此代码编写为:
@Override
public boolean equals(final Object obj)
{
if (obj == null || obj.getClass() != getClass()) {
return false;
}
if (obj == this) {
return true;
}
PuntoImpl<T> other = (PuntoImpl<T>) obj;
return other.puntoX.equals(this.puntoX) &&
other.puntoY.equals(this.puntoY);
}
不要忘记也重写hashCode
。
另请注意,比较浮点值以获得完全相等的值通常会产生意外的结果。 您可能需要提供一种查找点之间距离的方法,而不是覆盖equals
,因此可以将它们与特定容差进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.