纠正颜色的哈希码实现

时间:2017-09-10 17:05:33

标签: java hashcode

我有一个班级:

public class Color {
    private double red;
    private double green;
    private double blue;
}

使用等于方法:

public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }

    Color color = (Color) o;

    if (Math.abs(color.red - red) < COLOR_TRESHOLD) {
        return false;
    }
    if (Math.abs(color.green - green) < COLOR_TRESHOLD) {
        return false;
    }
    return Math.abs(color.blue - blue) < COLOR_TRESHOLD;
}

所以,正如你所看到的,我希望类似的颜色相同。 我的问题是如何为这种情况创建正确的哈希码实现。 当然,我可以返回恒定的价值。但这似乎不是一个好主意。

1 个答案:

答案 0 :(得分:0)

你应该把:

if (o == null || getClass() != o.getClass()) {
    return false;
}

作为第一次测试。有时如果传递了null并且它不是第一个检查的东西,则可以获得空指针异常。