Java:自动equals()和hashCode()

Ond*_*žka 18 java equals hashcode

实现equals()hashCode()简单的数据POJO使我的代码混乱,维护繁琐.

有哪些库自动处理?
由于性能原因,我更喜欢字节码检测而不是AOP方法.

更新:已经讨论了实现equals()和hashCode()的必要性的主题,这是我的观点:

以最小的努力提前完成它而不是挖掘代码,添加hC/eq是不是更好?

jos*_*chi 13

龙目岛项目提供了注解@EqualsAndHashCode将产生equals()hashCode()你的Java类.当然,与手动实现这些方法相比,存在一些缺点,因此请务必阅读链接页面上的"小字体".


Bas*_*que 6

Objects.hashCode&Objects.hash

\n

虽然不是您要求的灵丹妙药,但写下hashCode但从 Java 7 及更高版本开始,编写重写变得更容易了。

\n

Java 7开始,Objects提供了一些用于生成哈希码值的实用方法。

\n

我的回答对相关问题的回答。

\n\n

单个成员,不允许 NULL

\n
@Override\npublic int hashCode() {\n    return this.member.hashCode() ;  // Throws NullPointerException if member variable is null.\n}\n
Run Code Online (Sandbox Code Playgroud)\n

单个成员,允许 NULL

\n
@Override\npublic int hashCode() {\n    return Objects.hashCode( this.member ) ;  // Returns zero (0) if `this.member` is NULL, rather than throwing exception.\n}\n
Run Code Online (Sandbox Code Playgroud)\n

多人

\n
@Override\npublic int hashCode() {\n    return Objects.hash( this.memberA , this.memberB , this.memberC  ) ;  // Hashes the result of all the passed objects\xe2\x80\x99 individual hash codes.  \n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

对于自动生成hashCodeequals使用记录,如我的其他答案中所述中所述。

\n