是否可以添加toString()以简化调试?

why*_*ent 2 java tostring

我在intellij中工作很多,并且让类具有自己的tostring非常方便(intellij中生成的一个工作正常)所以当你试图找出什么东西时,你可以看到比MyClass @ 1345更丰富的信息.

我的问题是:那可以吗?我正在添加没有业务价值的代码,不会影响我的测试用例或我的软件的执行(我没有使用toString()进行调试).不过,这是我流程的一部分.这里有什么问题?

dav*_*xxx 5

toString()方法主要设计为调试目的方法.
除了一些特殊情况,您应该倾向于将其用于调试目的而不是向客户显示信息,因为客户需求可能恰好与当前的方法不同或相同,toString()但明天可能会有所不同.

toString()javadoc中,您可以阅读:

返回对象的字符串表示形式.通常,toString方法返回一个"文本表示"此对象的字符串.结果应该是一个简洁但信息丰富的表示,便于人们阅读.建议所有子类都重写此方法.

对您而言重要的部分是:

结果应该是一个简洁但信息丰富的表示,便于人们阅读.

建议所有子类都重写此方法.

你之前这么说 :

不过,这是我流程的一部分.这里有什么问题?

好事:规范推荐它.


Gho*_*ica 5

除了 davidxxx 的优秀观点外,以下内容也适用:

  • 一致性很重要。使用您的代码的人员不应对您的类中发生的情况感到惊讶。因此,要么“所有/大多数”类 @overridetoString()使用类似的实现,要么“无”这样做。
  • 因此:确保每个人都同意是否/如何实施toString()
  • 特别确保您的toString()实施是稳健的

含义:您绝对必须避免您的实现引发任何异常(例如 NPE,因为您碰巧someString + fieldX.name()对某些可能为 null 的 fieldX 执行了操作)。

您还必须避免创建“昂贵”的实现(例如,“深入”到某个数据库以从那里返回值的代码)。

个人观点2分:我发现toString()在调试东西时非常有价值;但我也看到了toString() 太昂贵的实际性能影响。问题是:您不知道某些跟踪代码调用toString()您的对象的频率;所以你最好确保它快速返回。