通常会有一个实体图,其中关系以两种方式映射,例如
class Home {
@Id
private Long id;
@OneToMany(mappedBy = "home")
Set<Room> rooms;
@Override
public String toString() {
return "Home [id=" + id + ", rooms=" + rooms + "]";
}
}
class Room {
@Id
private Long id;
@ManyToOne
private Home home;
@Override
public String toString() {
return "Room [id=" + id + ", home=" + home + "]";
}
}
这样说,如果我们使用IDE的自动生成toString方法,我们可能会在toString()方法中无意中导致深度递归,因为Home将打印Rooms,每个Room将依次打印它的Home。
是否有任何优雅的方式(特别是出于调试目的)以清晰的toString方式打印对象的图形,而不必在实现toString()方法时注意避免循环?
答案 0 :(得分:2)
如何使用Apache Commons Lang执行以下操作
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
这将为您提供对象的反身表示。这样你就可以实现一个格式化程序,它可以遍历对象图并完全打印输出,但不必担心管理单独的属性添加/删除。