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

标签 java equals overriding

我创建了一个包含 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/

相关文章:

java - 在java中使用带有局部变量的显示方法

java - Mongo 嵌入式服务器 : the single instance is not primary in replica set

java - Apache POI HSSF。获取总页数

xml - 覆盖和更改基类型中的 Xml 元素

java - 抽象方法覆盖,在java中实现不同的返回类型

android - 正确扩展/覆盖库 Activity ,在新项目中有效地替换它?

java - 将 Java 对象转换为 Json,反之亦然?

java - 如果我重载 equals 我仍然应该重写 java 中的 haschode 吗?

java - 在优先级相同的情况下维护优先级队列插入顺序

java - .equals() 用于 Java 中的用户定义类