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

Correct way to override hashCode() for persistent entity containing a boolean field?

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() 究竟如何或为何必须被覆盖,但我正在阅读它。

检查 false 是多余的。就这样

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

EDIT 请注意,这假定 isDisplay 是原始字段。如果是方框字段 (Boolean),则您发布的版本(带有空检查)应该是正确的。

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

return Objects.hash(configKey, isDisplay);