【问题标题】:Java: Printing out an object for debuggingJava:打印出用于调试的对象
【发布时间】:2011-04-14 20:32:57
【问题描述】:

我想要一种简单的方法来打印出 java 对象,或者换一种说法,将对象序列化为字符串。我想查看对象中包含的所有变量的值,如果有更多对象(如列表或其他),它也应该打印出该对象中的内容。基本上,它类似于 JSON 编码,但 JSON 不支持无穷大,我需要查看 double 或 float 值之一中是否存在无穷大或 NaN。

我该怎么做?

【问题讨论】:

  • 如果是你写的类,只要适当地覆盖ToString()方法。
  • 不是我写的。即使我可以,手动完成也需要很长时间。
  • “但是 JSON 不支持无穷大”是什么意思?
  • @Amir 请参阅规范的第 2.4 节 - ietf.org/rfc/rfc4627.txt?number=4627(JSON 官方不支持 NaN 和无穷大)

标签: java json tostring infinity divide-by-zero


【解决方案1】:

您可以使用 Gson 序列化为 JSON,因为它是 now supports NaN and +/- infinity

【讨论】:

  • 这很好用,比其他答案中的反射要好得多。我使用了Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().serializeNulls().create(); System.out.println(gson.toJson(obj));,它可以让我看到空值、NaN 和无穷大值。
  • 这不适用于模拟对象或静态变量
【解决方案2】:

ToStringBuilder.reflectionToString(Object) 通常效果很好。但是在做地图时它不会工作。

【讨论】:

  • ...这是 apache 的 commons-lang 的一部分
  • 链接似乎已损坏。请确认它是否已移至新位置。
猜你喜欢
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多