繁体   English   中英

覆盖等于方法给出错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM