我是一名计算机工程专业的学生,我在一周前开始Java
。我现在一直在研究泛型类型,我想把它与equals和Overriding混合在一起,所以我编写了一个程序来创建一个名为" Punto"有两个属性(pointX,pointY)所以它模拟坐标。我在主类之外写了一个静态方法,它使用了两个" 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中使用相同参数等于两个点,但它返回false。你能帮我找到错误吗?
答案 0 :(得分:4)
您通过引用相等性比较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
,这样您就可以将它们与某个公差进行比较。