Java 使用ReflectionStringBuilder更改类型的特定出现的输出
我正在使用Apache Common StringBuilder递归地为我的实体提供一个toString 我有一个定制的toString样式,我用它来给我一个稍微修改过的输出,我省略了一些我不想出现的变量 我的问题是,对于特定的对象类型,是否可以指定要打印的特定属性 例如: 我有两个Person对象,每个都有一个ID值,还有一个关系对象BestFriendJava 使用ReflectionStringBuilder更改类型的特定出现的输出,java,tostring,apache-commons-lang,Java,Tostring,Apache Commons Lang,我正在使用Apache Common StringBuilder递归地为我的实体提供一个toString 我有一个定制的toString样式,我用它来给我一个稍微修改过的输出,我省略了一些我不想出现的变量 我的问题是,对于特定的对象类型,是否可以指定要打印的特定属性 例如: 我有两个Person对象,每个都有一个ID值,还有一个关系对象BestFriend public class Person { int id; String name; int age; Person bestfiend;
public class Person {
int id;
String name;
int age;
Person bestfiend;
public void setBestFriend(Person bestFriend){
this.bestfiend = bestFriend;
}
}
当前发生的情况是,当我将两个人对象链接为Bestfriends时,ReflectionStringBuilder正在为Bestfriends的值编写整个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
下面的代码片段显示了如何有选择地排除BestFriend字段,然后只添加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();
}
ReflectionStringBuilder
类仅允许排除字段,而不允许更改字段的打印方式。您可以改为使用ToStringBuilder
类来定义如何从toString()
方法中打印Person
。您好,我已经实现了一个类,该类扩展了ToStringStyle以提供自定义输出(主要是格式化),我可以在该类中指定来执行所需的行为吗,虽然那可能会有点毛茸茸的。您是否有任何理由必须使用ReflectionStringBuilder
而不是ToStringBuilder
?使用后者,只需添加好友的ID字段就容易多了。唯一的原因是,您可以添加和删除字段,而无需担心添加/删除toString方法。