0

通常会有实体图,其中关系以两种方式映射,例如。

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() 方法以避免循环?

4

1 回答 1

2

如何使用 Apache Commons Lang 执行以下操作

@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}

这将为您提供对象的反身表示。通过这种方式,您可以实现一个格式化程序,该格式化程序将遍历对象图并漂亮地打印输出,但不必担心管理单个属性的添加/删除。

于 2015-01-20T17:27:25.273 回答