-1

Apache Common Lang ReflectionToStringBuilder を使用して、エンティティの toString を再帰的に提供しています。

わずかに変更された出力を提供するために使用しているカスタム ToStringStyle があり、表示したくない変数をいくつか省略しています。

私の質問は、特定のオブジェクト タイプに関するものです。印刷する特定の属性を指定できますか。

例: ID 値を持つ 2 つの Person オブジェクトと、BestFriend という Relationship オブジェクトがあります。

public class Person {

int id;
String name;
int age;
Person bestfiend;


public void setBestFriend(Person bestFriend){
    this.bestfiend = bestFriend;
  }
}

現在何が起こっているかというと、2 つの Person オブジェクトを Bestfriend にリンクすると、ReflectionToStringBuilder が Bestfriend の値に対して Person オブジェクト全体を書き込んでいます。

Person[  
id = 0001  
name = John  
age = 25  
bestFriend=Person@25eb3d2[  
                id = 0002  
                name = Mary  
                age = 29  
                ]  
]  

すべてのリレーションシップ オブジェクトについて、Person オブジェクト全体ではなく ID の値を提供するように指定できますか?

Person[  
id = 0001  
name = John  
age = 25  
bestFriend= 0002  
4

1 に答える 1

4

次のコード スニペットは、親友フィールドを選択的に除外し、ID 値のみを追加する方法を示しています。NPE を回避するには、null をチェックする必要があります。

@Override
public String toString() {
  ReflectionToStringBuilder builder = new ReflectionToStringBuilder(this);
  builder.setExcludeFieldNames("bestfriend");
  builder.append("bestfriend", (bestfriend == null) ? "None" : bestfriend.id);
  return builder.build();
}
于 2014-11-12T08:21:19.793 に答える