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

时间:2017-05-23 10:59:18

标签: java tostring

我在intellij中工作很多,让类有自己的tostring(intellij中生成的一个很好)可以很方便,所以你可以看到比MyClass @ 1345更有用的东西,当试图找出什么是。

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

4 个答案:

答案 0 :(得分:5)

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

toString() javadoc,您可以阅读:

  

返回对象的字符串表示形式。一般来说,   toString方法返回一个“文本表示”的字符串   宾语。结果应该是简洁但信息丰富的表示   一个人很容易阅读。建议所有人   子类重写此方法。

对您而言重要的部分是:

  

结果应该是简洁但信息丰富的表示   一个人很容易阅读。

  

建议全部   子类重写此方法。

你这么说:

  

不过,这是我流程的一部分。这里有什么用?

好事:规范推荐它。

答案 1 :(得分:4)

除了davidxxx的优点之外,还有以下几点适用:

  • 一致性很重要。使用您的代码的人应该对您的课程中发生的事情感到惊讶。因此,“所有/大多数”类@override toString()使用类似的实现 - 或“无”这样做。
  • 因此:确保每个人都同意是否/如何实施toString()
  • 明确确保您的toString()实施强大

含义:你必须避免你的实现抛出任何异常(例如NPE因为你碰巧对某些可能为null的fieldX执行someString + fieldX.name())。

您还必须避免创建“昂贵”的实现(例如,对某些数据库进行“深入”以从中返回值的代码)。

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

答案 2 :(得分:0)

docs解释了这种方法的功能:

  

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

如您所见,他们没有为此方法指定特定用途或阻止您使用它进行调试,但他们只说明了预期要做的事情,并建议在Object的子类中实现此方法。

因此严格来说,如何使用此方法取决于您。在我正在学习的大学课程中,某些任务需要覆盖toString方法,在某些情况下我们会被要求用它来演示debuging。

答案 3 :(得分:-1)

这是完全可以的,甚至是个好主意。大多数类都没有指定toString的内容,因此将它用于逻辑是不明智的(内容可能会在类的未来版本中更改)。但有些类可以做,例如StringBuilder。然后,也可以使用逻辑的返回值。

因此,对于您自己的类,您甚至可以选择指定内容并使用(并让用户使用)逻辑的返回值。