使用注释生成equals / hashcode / toString

我相信我通过识别哪些字段应该是散列/相等测试的一部分来读取人们在编译期间(使用APT)生成equals / hashcode / toString方法的地方。 我在网上找不到那样的东西(我可能梦见过它?)……

这可以这样做:

public class Person { @Id @GeneratedValue private Integer id; @Identity private String firstName, lastName; @Identity private Date dateOfBirth; //... } 

对于一个实体(所以我们想要排除一些字段,比如id)。

或者像scala案例类,即值对象:

 @ValueObject public class Color { private int red, green, blue; } 

不仅文件变得更易读和更容易编写,而且它还有助于确保所有属性都是equals / hashcode的一部分(如果您稍后添加其他属性,而不相应地更新方法)。

我听说APT在IDE中得不到很好的支持,但我不认为这是一个主要问题。 毕竟,测试主要由持续集成服务器运行。

有没有想过这是否已经完成,如果不是为什么? 谢谢

我正在使用Project Lombok 。

虽然Pojomatic不进行编译时字节码操作,但它确实支持轻松创建equals,hashCode和toString方法,使用注释来自定义其行为。

图书馆AutoValue中的Google解决方案: https ://github.com/google/auto/tree/master/value在编译之前使用@AutoValue注释+生成源。

以下演示文稿中讨论了几种竞争解决方案: https : //docs.google.com/presentation/d/14u_h-lMn7f1rXE1nDiLX0azS3IkgjGl5uxp5jGJ75RE/edit