8

我相信我在某个地方读到了人们在编译期间(使用 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 中没有得到很好的支持,但我不认为这是一个主要问题。毕竟,测试主要由持续集成服务器运行。

知道这是否已经完成,如果没有,为什么?谢谢

4

3 回答 3

16

我正在为此使用Project Lombok

于 2010-03-29T03:12:40.713 回答
2

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

于 2010-05-05T17:02:02.103 回答
1

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

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

于 2015-04-23T11:42:37.263 回答