使用注释生成equals / hashcode / toString

时间:2010-03-29 03:09:39

标签: java equals hashcode annotations apt

我相信我通过识别哪些字段应该是哈希/相等测试的一部分来读取人们在编译期间(使用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中得不到很好的支持,但我不认为这是一个主要问题。毕竟,测试主要由持续集成服务器运行。

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

3 个答案:

答案 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