我需要能够遍历整个对象图并记录所有成员字段的所有内容。
例如:对象A具有对象B的集合,而对象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--;
}
}
20231022 10:00-10:30am 美团优选商品品类运营hr面 一共2面,这是最后一面。 整体感受:HR小姐姐敬业又专业,好像身体不舒服嗓子沙哑还在周日面试,介绍整体组织架构十分细致。 hr先进行了自我介绍,然后开始喊我: 1、自我介绍 2、你的过往经历中,你自己主动去做的职责之外的事情,举个例子 hr对整体组织架构进行了详细介绍,反问环节+面评。
我正在使用Firestore&Java。我正在尝试通过查询和批处理更改多个值。 我的数据库 当我运行此代码时,我唯一的第一个值更新。我从未达到第二个值:/
问题内容: 我正在尝试使用Sphinx在Python中记录5,000多个项目。它有大约7个基本模块。据我所知,为了使用自动文档,我需要为项目中的每个文件编写如下代码: 这太繁琐了,因为我有很多文件。如果我只想指定要记录的“ mods”包,那会容易得多。然后,Sphinx可以递归地浏览包并为每个子模块创建一个页面。 有这样的功能吗?如果没有,我可以编写一个脚本来制作所有.rst文件,但这将花费很多时
问题内容: 我有以下for循环,当我用来删除项目时,然后得到的“秒数”是不确定的。我可以检查它是否未定义,但是我觉得可能有一种更优雅的方法来执行此操作。愿望是简单地删除一个项目并继续进行。 问题答案: 当您执行时,该数组将被重新索引,这意味着删除索引时将跳过索引,并且缓存已过时。 要解决此问题,您可能需要在后面减一,或者简单地反向迭代… 这样,重新索引不会影响迭代中的下一个项目,因为索引仅影响从当
我试图使用本机查询从数据库中选择一些条件为true的列。当我击中邮递员的请求时,我得到了上面提到的错误。下面包括完整的日志。我在Java8上运行一个spring-boot应用程序,Db是PostgreSQL。请指出哪里出了问题,如何解决。 错误日志- 我在存储库中的查询- ScoreCardForSummary类- 存储库中的查询由服务层调用,服务层由控制器调用。请询问是否需要更多信息。 谢谢和问
我有一个简单的bash脚本,它在设备列表中迭代,并对Android设备运行adb shell命令。代码如下: 运行时,代码将在一个设备上成功运行所有配置。插入两个设备时,输出读数如下: