Java toString – ToStringBuilder还不够;不会遍历
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java toString – ToStringBuilder还不够;不会遍历,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1673字,纯文字阅读大概需要3分钟。
内容图文
我需要能够遍历整个对象图并记录所有成员字段的所有内容.
例如:对象A具有对象B的集合,其具有对象C的集合,并且A,B,C具有其他字段,等等.
Apache Commons ToStringBuilder是不够的,因为它不会遍历对象图或输出集合的内容.
有没有人知道另一个库会做这个或有一个代码片段来做到这一点?
解决方法:
您可以使用org.apache.commons.lang.builder.ReflectionToStringBuilder遍历整个树.诀窍在于,在ToStringStyle中,您需要遍历该值. ToStringStyle将处理已经处理的值,并且不允许递归.开始了:
System.out.println(ReflectionToStringBuilder.toString(schema, new RecursiveToStringStyle(5)));
private static class RecursiveToStringStyle extends ToStringStyle {
private static final int INFINITE_DEPTH = -1;
/**
* Setting {@link #maxDepth} to 0 will have the same effect as using original {@link #ToStringStyle}: it will
* print all 1st level values without traversing into them. Setting to 1 will traverse up to 2nd level and so
* on.
*/
private int maxDepth;
private int depth;
public RecursiveToStringStyle() {
this(INFINITE_DEPTH);
}
public RecursiveToStringStyle(int maxDepth) {
setUseShortClassName(true);
setUseIdentityHashCode(false);
this.maxDepth = maxDepth;
}
@Override
protected void appendDetail(StringBuffer buffer, String fieldName, Object value) {
if (value.getClass().getName().startsWith("java.lang.")
|| (maxDepth != INFINITE_DEPTH && depth >= maxDepth)) {
buffer.append(value);
}
else {
depth++;
buffer.append(ReflectionToStringBuilder.toString(value, this));
depth--;
}
}
// another helpful method
@Override
protected void appendDetail(StringBuffer buffer, String fieldName, Collection<?> coll) {
depth++;
buffer.append(ReflectionToStringBuilder.toString(coll.toArray(), this, true, true));
depth--;
}
}
内容总结
以上是互联网集市为您收集整理的Java toString – ToStringBuilder还不够;不会遍历全部内容,希望文章能够帮你解决Java toString – ToStringBuilder还不够;不会遍历所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。