首页 > 解决方案 > 什么是 equals 合约的重要字段(有效的 java item 8)

问题描述

在第 8 项的有效 Java 中,建议是

对类中的每个重要字段检查this对象的对应字段。

我知道我们可以拥有由主要字段计算的辅助字段,但是“对于每个重要字段”的确切含义是什么?仅当比较对象的所有字段 时,equals合同是否正确执行?

例如,如果我有一个类Employee,它有多个字段,如 id、名字和姓氏、dob、位置、位置等,所有这些似乎都很重要,但对我来说,似乎只使用id就足以实现正确和高性能的equals实现。

我错了吗?或者id我提到的正是布洛赫所说的“重要”领域?

标签: javaclassoopequalshashcode

解决方案


class Employee {

    private UUID id;
    private String firstName;
    private String lastName;

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!(obj instanceof Employee))
            return false;
        return id.equals(((Employee)obj).id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

如果 ofEmployee存储到 DB 中,即 has unique id,则无需检查其他字段,如firstNameand lastNamein equals;根据数据对象比较,只有id归档是显着的。


推荐阅读