【问题标题】:Generate Java Object from toString representation [duplicate]从 toString 表示生成 Java 对象 [重复]
【发布时间】:2023-03-16 13:28:02
【问题描述】:

我们都知道如何实现 toString() 方法。我们打印对象数据的方式可能是稍微自定义的实现和不同的模式。

使用生成的toString,我们可以重新创建对象吗?我不是在这里谈论Serialization

让我解释一个场景,您可能有一个应用程序在生产环境中愉快地运行,当您收到一些请求并执行一些操作时,您的日志会打印这些对象。并且可能会引发一些问题。

要复制某些硬错误,您将返回到您的单元测试用例/mockito,用类似的数据重新创建问题。

现在,如果我可以从它的 toString 表示中重现该对象, 因为它所有的依赖对象也实现了toString,我会 能够清除大部分情况。

有没有默认的插件/工具可以做同样的事情?如果没有,这可能是我的下一个试穿项目:)

【问题讨论】:

  • 没有没有通用的方法来做到这一点。也就是说,“toString”类似于某些语言中的“toRepr”。如果 custom 对象实现了“toString”,从而实现了“序列化”语义,那么从中重新创建 custom 对象应该同样简单,假设这样的映射可以被执行(即相关数据在字符串中被“序列化”了)。
  • 由于这个问题被标记为重复,我已经发布了原始问题的答案here

标签: java object tostring


【解决方案1】:

toString() 方法旨在返回对象的可读表示,而不是完整表示。

如果您想将对象编组为稍后可以解组的字符串,通常的选项是 XML、JSON、平面文件……也许可以查看 JAXB。

您可以选择自定义格式,唯一的要求是重建对象所需的所有信息都在其中,并且您编写自定义解析器以再次构建对象。如果所述自定义格式也恰好是可读的,则可以将其插入 toString()。

【讨论】:

    【解决方案2】:

    不,没有通用的方法

    (考虑 toString 方法返回 empty string 的情况)

    最好的办法是在异常情况下记录更多详细信息,可能在更精细的log level

    【讨论】:

      【解决方案3】:

      不,你不能。

      toString() 仅用于loggingdebug 用途。它不适用于序列化state of an Object

      如果有问题的对象支持serialization,请使用serialization and deserialization 了解如何执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 2010-10-27
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        相关资源
        最近更新 更多