如何在Java中记录任意对象的内部结构? 1 周,5 日 Questions & Answers 249 我有一个结构未知的Java对象。现在我想将这个结构(属性及其值)输出到日志文件中。当然我对递归模式很感兴趣。有什么图书馆可以帮助我吗
# 3 楼答案 我发现apachecommons非常有用。要获得递归,可以通过调用传递this的函数来覆盖每个对象的toString()方法 http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/builder/ToStringBuilder.html
# 4 楼答案 XStream非常擅长打印对象图,即使在类中没有任何额外配置或额外代码的情况下也能处理循环(即,不会弄乱toString()。只需添加库,您就可以对任何内容执行此操作,并获得漂亮、有用的输出: log.debug("The object: {}", new XStream().toXML(anyObject)); 这将为您提供XML输出。如果您更喜欢JSON,您可以通过XStream JSON tutorial中详细介绍的稍微多做一点工作来获得它
# 1 楼答案
Java附带的Java序列化应该可以做到这一点。它将是二进制格式的
还有可以由JAXB提供的XML序列化
# 2 楼答案
你应该使用反射。请看一下
java.lang.Class
类,特别是.getFields()
方法# 3 楼答案
我发现apachecommons非常有用。要获得递归,可以通过调用传递
this
的函数来覆盖每个对象的toString()方法http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/builder/ToStringBuilder.html
# 4 楼答案
XStream非常擅长打印对象图,即使在类中没有任何额外配置或额外代码的情况下也能处理循环(即,不会弄乱toString()。只需添加库,您就可以对任何内容执行此操作,并获得漂亮、有用的输出:
这将为您提供XML输出。如果您更喜欢JSON,您可以通过XStream JSON tutorial中详细介绍的稍微多做一点工作来获得它
# 5 楼答案
你可以使用反射
getClass,然后检查每个实例变量并继续(可以专门处理某些对象(如字符串))
# 6 楼答案
我建议您看看ApacheCommonsBeanutils或ApacheCommonsLang,特别是StringBuilder