【发布时间】:2021-02-22 23:13:43
【问题描述】:
我有这样的循环引用的对象:
@Data
class ClassA{
private int someInt;
private List<ClassB> someCollection;
}
@Data
class ClassB{
private int someInt;
private ClassA someInstance;
}
因此,每当我对具有循环引用的对象执行toString() 时,堆栈就会如您所料那样溢出。
到目前为止,我可以像这样使用@lombok.ToString.Exclude 来防止这种情况发生:
@Data
class ClassA{
private int someInt;
@ToString.Exclude
private List<ClassB> someCollection;
}
或者也这样:
@Data
class ClassB{
private int someInt;
@ToString.Exclude
private ClassA someInstance;
}
但是,这给我留下了隐藏一些重要调试信息的对象。
无论如何使用注释来获取有关字段的信息,而不是字段本身? 例如:
@Data
class ClassA{
private int someInt;
@ToString.CollectionSize //this could print someCollection.getSize()=n
private List<ClassB> someCollection;
}
或者喜欢:
@Data
class ClassB{
private int someInt;
@ToString.IsNull // this could be someInstance.isNull()=false
private ClassA someInstance;
}
或者是否有一种简单的方法可以将行为附加到 lombok 的 toString() 只是 lombok 真的、真的、真的很有用......而且不得不在这些中覆盖整个 toString() 将是一种耻辱案例。
【问题讨论】:
标签: java annotations lombok