我相信我通过识别哪些字段应该是哈希/相等测试的一部分来读取人们在编译期间(使用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的一部分(如果您稍后添加其他属性,而不相应地更新方法)。
我听说AP在IDE中得不到很好的支持,但我不认为这是一个主要问题。毕竟,测试主要由持续集成服务器运行。
有没有想过这是否已经完成,如果不是为什么? 感谢
答案 0 :(得分:16)
我正在使用Project Lombok。
答案 1 :(得分:2)
虽然Pojomatic不进行编译时字节码操作,但它确实支持轻松创建equals,hashCode和toString方法,使用注释来自定义它们的行为。
答案 2 :(得分:1)
Google在库AutoValue中的解决方案:https://github.com/google/auto/tree/master/value在编译之前使用@AutoValue注释+生成源。
以下演示文稿讨论了几种竞争解决方案:https://docs.google.com/presentation/d/14u_h-lMn7f1rXE1nDiLX0azS3IkgjGl5uxp5jGJ75RE/edit