正确的方法来覆盖包含布尔字段的持久化实体的hashCode()?

时间:2016-06-07 22:04:42

标签: java hibernate persistent

private long configKeyMasterId;
private String configKey;
private boolean isDisplay;

public int hashCode() {
    int result = (int) (configKeyMasterId ^ (configKeyMasterId >>> 32));
    result = 31 * result + (configKey != null ? configKey.hashCode() : 0);
    result = 31 * result + (isDisplay != null ? isDisplay.hashCode() : 0);
    return result;
}

这就是我所拥有的isDisplay是一个布尔字段。我知道第3行是错的,但我该如何解决呢?

有点天真,

result = 31 * result + (isDisplay != false ? Boolean.hashCode(isDisplay) : 0);

好吗?

我不知道如何或为什么必须覆盖hashCode(),但我正在阅读它。

2 个答案:

答案 0 :(得分:2)

检查false是多余的。只是做

result = 31 * result + Boolean.hashCode(isDisplay);

编辑请注意,这假设isDisplay是原始字段。如果它是一个盒装字段(Boolean),那么您发布的版本(使用空检查)应该是正确的。

答案 1 :(得分:2)

如果您使用的是Java 7或更高版本,则可以使用Objects.hash(...)而不是编写自己的版本并避免空检查。

return Objects.hash(configKey, isDisplay);