重写 equals 方法会报错

Override equals method gives an error

我是一名计算机工程专业的学生,​​我 Java 一周前就开始学习了。这些天我一直在研究泛型类型,我想将它与 equals 和 Overriding 混合使用,所以我编写了一个程序来创建一个名为 "Punto" 的对象,该对象具有两个属性(pointX,pointY),因此它可以模拟坐标。我在主 class 之外写了一个静态方法,它使用两个 "Puntos" 作为参数并使它们相等。这是该方法的代码:

public static boolean iguales(PuntoImpl<Double> p1, PuntoImpl<Double> p2){
    return p1.equals(p2);
}

这是我尝试覆盖 equals 的方法:

@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 中用相同的参数等于两个点,但它 returns 我错了。你能帮我找出错误吗?

您正在通过引用相等比较 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,因此您可以将它们与一定的公差进行比较。