-1

我正在使用 Apache Common Lang ReflectionToStringBuilder 为我的实体递归地给我一个 toString。

我有一个自定义 ToStringStyle,我用它来给我一个稍微修改的输出,并且我省略了一些我不想出现的变量。

我的问题是针对特定对象类型,您能否指定要打印的特定属性。

例如:我有两个 Person 对象,每个对象都有一个 ID 值,以及一个名为 BestFriend 的关系对象。

public class Person {

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


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

目前正在发生的事情是,当我将两个 Person 对象链接为 Bestfriends 时,ReflectionToStringBuilder 正在为 Bestfriend 的值编写整个 Person 对象。

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

您能否指定为所有关系对象给我 ID 的值而不是整个 Person 对象?

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

1 回答 1

4

下面的代码片段展示了如何选择性地排除最好的朋友字段,然后只添加 ID 值。您必须检查 null 以避免 NPE。

@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 回答