如何为Java record自定义equals和hashCode方法?
解决方案
Java Record 支持手动覆写默认生成的equals()和hashCode()方法,你可以直接在Record结构内部自定义实现逻辑,忽略字段a的完整示例如下:
import java.util.Objects; record Data(int x, int y, int a) { // 自定义equals逻辑,仅比较x、y字段 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Data data = (Data) o; return x == data.x && y == data.y; } // 自定义hashCode逻辑,仅用x、y计算哈希值 @Override public int hashCode() { return Objects.hash(x, y); } }
注意事项
- 需保证
equals()和hashCode()逻辑对齐:如果两个对象调用equals()返回true,则二者的hashCode返回值必须相等,因此两个方法都要同步排除a字段,不能只修改其中一个 - 日常开发中可以直接用IDEA、Eclipse等主流IDE的自动生成功能,生成时仅勾选需要参与比对的
x、y字段即可,无需手动编码,避免出错
内容的提问来源于stack exchange,提问作者Thirumal
相关产品推荐
相关产品推荐

