首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >lombok添加canEqual方法的原因

lombok添加canEqual方法的原因
EN

Stack Overflow用户
提问于 2019-10-07 05:20:56
回答 1查看 4.6K关注 0票数 13

使用lombok @数据时(它添加了EqualsAndHashCode)

它增加了canEqual方法

受保护布尔canEqual(对象其他){返回其他实例的练习;}

它只被称为一次:

如果(!other.canEqual((对象)此)返回false;

我搜索并找到了关于访问级别的讨论

如果您在非最终类中实现了equals和hashCode,那么我们所能做的最安全的事情就是以相同的方式添加can。由于我们没有添加任何字段,所以成本很小,特别是在方法受到保护的情况下。

但是为什么我们需要这个生成的方法呢?它不能是内联的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-07 05:32:57

canEqual方法在一篇题为如何用Java编写相等方法的论文中定义。此方法的目的是允许在类层次结构的多个级别上重新定义相等,同时保留其契约:

其思想是,一旦类重新定义了equals (和hashCode),它还应该明确声明该类的对象永远不等于实现不同相等方法的超类的对象。这是通过向每个重新定义canEqual的类添加一个方法equals来实现的。

它似乎是在Lombok0.10中引入的,正如@EqualsAndHashCode文档中所描述的那样:

Lombok 0.10中的新类:除非您的类是final并扩展了java.lang.Object,否则lombok将生成一个canEqual方法,这意味着JPA代理仍然可以与它们的基类相等,但是添加新状态的子类不会破坏相等的契约。

这些文档更进一步,引用了上面引用的论文:

本文解释了为什么需要这样的方法的复杂原因:如何用Java编写相等方法。如果一个层次结构中的所有类都是scala案例类和带有lombok生成的equals方法的类的混合,那么所有的等式都将“只起作用”。如果需要编写自己的equals方法,则如果更改equalshashCode,则应始终重写equals

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58263870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档