gpt4 book ai didi

java - 重写自定义类的哈希码和等于

转载 作者:行者123 更新时间:2023-12-01 07:50:51 24 4
gpt4 key购买 nike

我创建了一个包含 2 个字段的类。 Double 和 Line2D。我想重写 equals 方法,以便以下代码返回 true

public class Main {

public static void main(String[] args) {
StatusLinePair slp1 = new StatusLinePair(25.0, new Line2D.Double(123.0, 32.0, 342.0, 54.0));
StatusLinePair slp2 = new StatusLinePair(25.0, new Line2D.Double(123.0, 32.0, 342.0, 54.0));

System.out.println(slp1.equals(slp2));
}

}

这是我已经尝试过的,但我仍然没有得到想要的结果

public class StatusLinePair {
public Double yAxisOrder;
public Line2D line;

public StatusLinePair(Double yAxisOrder, Line2D line) {
this.yAxisOrder = yAxisOrder;
this.line = line;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((line == null) ? 0 : line.hashCode());
result = prime * result + ((yAxisOrder == null) ? 0 : yAxisOrder.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
StatusLinePair other = (StatusLinePair) obj;

if (this.yAxisOrder == other.yAxisOrder && this.line.getX1() == other.line.getX1()
&& this.line.getX2() == other.line.getX2() && this.line.getY1() == other.line.getY1()
&& this.line.getY2() == other.line.getY2())
return true;

return false;
}
}

请帮助我。提前致谢!

最佳答案

您的代码存在几个问题:

  • 如果另一个对象不是 StatusLinePair,它应该返回 false,而不是抛出 ClassCastException
  • 如果另一个对象为 null,它应该返回 false,而不是抛出 NullPointerException
  • 它不应该将 Double 实例与 == 进行比较,而应与 equals() 进行比较(或者类应该包含 double 而不是 Double,因为它不似乎可以为空):这就是您的特定问题的原因。
  • 它不应该使用 Line2D.hashCode(),因为它不使用 Line2D.equals()

关于java - 重写自定义类的哈希码和等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com