java - 使用注释生成 equals/hashcode/toString

标签 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 的一部分(以防您稍后添加另一个属性,而无需相应地更新方法)。

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

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

最佳答案

我正在使用 Project Lombok为此。

关于java - 使用注释生成 equals/hashcode/toString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535592/

相关文章:

java - 不应在数组实例上调用 "hashCode"和 "toString"(SonarLint)

java - 使用 Spring-Boot 创建一个简单的 JAR 而不是可执行的 JAR

java - 将java代码转换为c#

java - 为什么 hashcode() 返回一个整数而不是长?

java - 一种节省空间的数据结构,用于存储和查找大量(均匀分布的)整数

c# - 为什么在 GetHashCode 实现中使用初始素数?

java - JDBC PreparedStatement 查询

java - 为什么 Map 的 containsKey() 只调用 hashCode()?

java - 具有双向关联的类的 equals() 方法

java - 对于 containsKey(),treemap 使用 compareTo 而不是 equals