@EqualsAndHashCode
原文中提到的大致有以下几点:
1. 此注解会生成equals(Object other)
和 hashCode()
方法。
2. 它默认使用非静态,非瞬态的属性
3. 可通过参数exclude
排除一些属性
4. 可通过参数of
指定仅使用哪些属性
5. 它默认仅使用该类中定义的属性且不调用父类的方法
6. 可通过callSuper=true
解决上一点问题。让其生成的方法中调用父类的方法。
另:@Data
相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode
这5个注解的合集。
通过官方文档,可以得知,当使用@Data
注解时,则有了@EqualsAndHashCode
注解,那么就会在此类中存在equals(Object other)
和 hashCode()
方法,且不会使用父类的属性,这就导致了可能的问题。
比如,有多个类有相同的部分属性,把它们定义到父类中,恰好id(数据库主键)也在父类中,那么就会存在部分对象在比较时,它们并不相等,却因为lombok自动生成的equals(Object other)
和 hashCode()
方法判定为相等,从而导致出错。
修复此问题的方法很简单:
1. 使用@Getter @Setter @ToString
代替@Data
并且自定义equals(Object other)
和 hashCode()
方法,比如有些类只需要判断主键id是否相等即足矣。
2. 或者使用在使用@Data
时同时加上@EqualsAndHashCode(callSuper=true)
注解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2019-12-03 对象锁的同步和异步
2019-12-03 多个线程多个锁
2019-12-03 线程安全
2019-12-03 并发编程
2019-12-03 线程同步与死锁
2019-12-03 线程的优先级
2019-12-03 线程的常用方法