重写 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
,因此您可以将它们与一定的公差进行比较。
我是一名计算机工程专业的学生,我 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
,因此您可以将它们与一定的公差进行比较。