解决方式
Lomok 在会自动生成相关代码,但由于Lomok并没有判断循环引用的机制,因此在直接生成相互引用对象的toString方法时,toString方法相互引用。造成循环引用问题。
解决方案可以加
@ToString(exclude = {“忽略属性名”})
分析
最近开始用Lomok,发现这工具的确能提高不少开发效率,但有点荒废了苦练了的快捷键。
@Data相当于集成
@ Getter
@ Setter
@ RequiredArgsConstructor
@ ToString
@ EqualsAndHashCode
Lomok 在会自动生成相关代码,但由于Lomok并没有判断循环引用的机制,因此在直接生成相互引用对象的toString方法时候,会生成如下代码
return "A(field1=" + this.getField1() + ", field2=" + this.getField2() + ")";
假设类A,类B
@Data class A {
private int aid;
private B b;
}
@Data class B {
private int bid;
private A a;
}
因此在toString时,调用A.toString()时,实际执行方法如下
public String toString() {
return "A(aid=" + this.getAid() + ", b=" + this.getB() + ")";
}
this.getB()拼接字符串时实际调用this.getB().toString(),实际执行方法如下
public String toString() {
return "B(bid=" + this.getBid() + ", b=" + this.getA() + ")";
}
此时,同理调用this.getA().toString()循环引用。