Lombok @Data是否覆盖现有的toString和hashCode方法?

时间:2014-10-29 08:33:51

标签: java lombok

最近我们开始在项目中使用Lombok功能。我们对Domain对象有@Data注释,因为运行时有一些由Lombok api提供的hashCode()方法抛出的异常。之后,当我添加@Setter@Getter而不是@Data时,我没有看到任何问题。

问题1: Lombok @Data是否会覆盖hashCode()toString()等类中的现有方法?

问题2:为什么hashCode()在这里遇到问题?

1 个答案:

答案 0 :(得分:15)

是的,@Data隐含@EqualsAndHashCode@ToString。见the @Data documentation

生成的hashCode()方法将为所有字段调用hashCode方法。因此,如果字段的某个值抛出异常,那么这也是。

另一个场景是你有循环对象引用:如果一个对象有一个包含一个对象的字段,该对象有一个引用第一个对象的字段,调用hashCode方法将触发一个StackOverflow。

披露:我是Lombok的开发者之一。