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 に答える