最近我们开始在项目中使用Lombok功能。我们对Domain对象有@Data
注释,因为运行时有一些由Lombok api提供的hashCode()
方法抛出的异常。之后,当我添加@Setter
和@Getter
而不是@Data
时,我没有看到任何问题。
问题1: Lombok @Data
是否会覆盖hashCode()
和toString()
等类中的现有方法?
问题2:为什么hashCode()
在这里遇到问题?
答案 0 :(得分:15)
是的,@Data
隐含@EqualsAndHashCode
和@ToString
。见the @Data
documentation。
生成的hashCode()
方法将为所有字段调用hashCode方法。因此,如果字段的某个值抛出异常,那么这也是。
另一个场景是你有循环对象引用:如果一个对象有一个包含一个对象的字段,该对象有一个引用第一个对象的字段,调用hashCode方法将触发一个StackOverflow。
披露:我是Lombok的开发者之一。