一个主要开发人员对我的项目采取了参考的项目的toString()实现为"纯粹的令人讨厌的",并去除他们的代码。

我说,这样做将意味着任何客户希望显示的对象,将来编写他们自己的代码转换的目的串,但是回答为"是的,他们将".

现在具体地说,对象,在这个系统的图形元素,如矩形,圆形,等和当前的表述是为了显示x、y、规模、范围等等。

所以,哪里的人群谎言?

当你应该和当时你不是应该实施toString?

有帮助吗?

解决方案

他们这样做有什么危害?为什么,如果你让他们删除它们?我发现的toString()是非常有用的发光调试语句时。

就个人而言,我总是在具有一个可行的toString()方法的侧犯错。这么少的工作来写。

其他提示

去除写得好的(或甚至中途体面写入)的toString()方法是纯精神错乱,IMO。是的,我经常懒得写这些(因为通常对象最终不会让他们无论如何使用),但他们都非常方便有。

我真的想不出一个很好的理由,想摆脱这些。

我一直确信,我的类实现的toString。

它提供调试类的当前状态,当我调试,当我记录的错误,我可以包括到我的日志消息的简单方法。

我保持toString()实现。他们是非常宝贵的,当涉及到调试,以及他们可以为图形组件良好的替代文字。

我认为的toString()应谨慎重写相反。默认toString()实现是非常无信息和基本没用。一个良好的toString()实现可以给开发者一览无遗的对象的内容是非常有用的视图。你可以不必把一切都放在那里,但至少是重要的东西。我想你的主要开发人员应实际编码和增加功能,而不必担心“克鲁夫特”。

我只实现它的更复杂的对象,其中客户端代码并不关心对象状态的细粒度的细节,而是在乎一些人理解的,意义建构信息,汇总到底是怎么回事,状态明智...

对于一切,像JavaBeans的,我希望客户端代码把我的对象到的如果它需要做低级调试或类似,ToStringBuilder方法。

ToStringBuilder.reflectionToString(myObject);

或客户端代码应该只是调用标准属性的getter和记录他们喜欢的方式...

在一般情况下,是toString()好东西。特别是,它是的相当用于调试有用即可。

实施toString()也不是没有的成本和<强>风险即可。像所有的代码,的 toString()实现必须被保持的代码的其余部分。这意味着保持toString()同步与类字段。例如,当一个场被添加或移除,toString()应适当地更新(你应该已经像hashCode()equals()方法这样做)。

<强>实施toString()招致风险为好。例如,假设两个类的系统上有其他的实例的引用(双向链路),则<强> toString()的调用可导致堆栈溢出由于无限递归作为toString()每一类中实现调用其他类的toString()实现。

如果您的系统拥有了不同步toString()方法,或导致盲蝽象栈溢出方法显著号码,那么你的同事的可能的有一个合理的点。即使在这种情况下,我的只是注释掉马车toString()方法并留在他们的代码。根据需要在未来各toString()方法可以取消注释并更新单独

我总是自动生成的toString()的所有我的POJOs,DTOs和/或保存持久性数据的任何对象的方法。对于私人内部性能良好记录的做法应该做的伎俩。

始终记得的toString方法口令和与[Omitted]其他sesitive信息来替换(或类似的顶分泌性质的东西)

好了,他确实stramge的事情。

我不能说的toString()是太有用。对于演示文稿,您将需要其他工具。

但toString()方法对于调试非常有用,因为你可以看到收藏的内容。

我不明白为什么删除它,如果它已经写入

我想答案取决于你的toString()方法是如何复杂的是,他们需要多少工作来维持,他们是如何被经常使用。假设你使用的toString()常为日志和调试它并没有多大意义,除去这些方法。但是,如果它们很少使用,需要大量的工作,每次在你的代码有新的变化保持,则有可能是为摆脱全部或部分的toString的一个有效参数()方法。

您提到的一些事情需要显示这些对象的客户。从这我猜您的代码或含有某种库或API,其他开发者使用。在这种情况下,我强烈建议你保持有用的toString()实现。即使你没有做很多日志记录和调试的,你的客户可能,他们一定会感激的有用的toString(),他们不必编写和维护自己的方法。

1麦克ç

和超过其有用用于调试的上方,所述的toString()是一个非常有用的工具来了解类作者的实例的透视图。

FWIW,如果需要的toString输出从你期望看到(礼貌规范文档)你就会知道rightaway出事了严重的错误有什么不同。

就个人而言,我实现它们的时候我会在一个JList,JTable的,或使用的toString(),或者当我调试其他结构的使用对象(是的,日蚀调试格式化但的toString()是比较容易)

也许你可以还击,许多JDK类有toString()方法。他们应该被同时删除? ;)

我会说你应该实现的toString,如果这是期望的使用情况或需求,给将对象显示为字符串表示(在日志,控制台,或某种显示树的上)。

否则,我同意与开发商 - 每次你改变一些东西时,的toString可以打破。您可能必须要小心空值,等等。

很多时候,虽然,它其实是在调试或日志使用,所以它不是很明显,他们应该都离开了。

我同意jsight,如果他们已经编写,并写入体面,留在他们至少要等到他们得到的方式(比如你实际上是一个字段添加到一个类)。

有关调试目的,没有人能击败toString。它的实用兼备的调试器,以及简单的调试打印。确保它显示的是基于您equalshashCode方法的所有字段,如果重写这些的!

有关显示给最终用户,我不会用toString,虽然。对于这一点,我认为这是更好,如果你需要写的另一种方法,即不正确的格式,和国际化。

这是有道理的,因为你总是有toStrings出过少或过多信息的问题。

这可能是有意义的你的团队使用的Jakarta Commons郎而不是ToStringBuilder:

System.out.println("An object: " + ToStringBuilder.reflectionToString(anObject));

其内部检查对象,并打印出公共字段。

HTTP://公地.apache.org /郎/ API-2.3 /组织/阿帕奇/公地/郎/助洗剂/ ToStringBuilder.html

  

我说,这样做将意味着   任何客户希望展示   对象会写自己的   自己的代码来将对象转换为   字符串,但得到的回答是   “是他们将”。

这是不是一个可以孤立地回答的问题......你应该问什么,他们认为这个想法的客户端(或人写他们)。如果我使用的是Java库,并依托其toString()用于调试的过载,我会相当恼火,如果库的开发人员决定清除这些。

要说句公道话,说开发商在这里,但没有任何意义上的开发主管。

在原始的问题是未必约的toString(),但关于第二方法中的paramString:   “在所有的字符串连接和空值检查的,中的paramString是一个错误磁铁。”

请参阅 http://code.google.com/p/ piccolo2d /问题/细节?ID = 99个

我肯定会保持了toString()实现,特别是用于调试目的。作为一个主要的C ++开发者,祝事在C作为容易++,因为它们是在Java中在这方面(操作符重载可以是疼痛)。

如果存在与现有toString()实现的问题,开发人员应该解决这个问题。说当前实现全部是“纯克鲁夫特”和除去它们正在积极害,除非现有toString()方法的罕见写得不好。

我将强烈阻止从除去任何起作用toString()方法的显影剂。

实现总是:)如上所述,它是非常宝贵的调试。

这是良好的调试目的。但是,如果你想显示给定对象的字符串,你不应该使用toString()实现,但对于提供自定义方法最终用户。

所以关于

  

我说,这样做将意味着   任何客户希望展示   对象会写自己的   自己的代码来将对象转换为   字符串,但得到的回答是   “是他们将”。

我同意你的团队负责人。如果你想显示对象的任何客户端使用自定义实现。如果你想使用它用于调试目的使用的toString()。

虽然 toString() 方法都是非常有用的用于调试的值班,可以说他们是 没有用的实体类.

我想我会衡量在与一个更现代化的透鉴于这个问题现在几乎10岁。

toString 显然是有助于调试-你需要看看没有进一步的比所有其他的答案在这里,这证明这一点的-但是 调试的信息不是业务逻辑.

具有一个 toString 方法中的每一类是视觉上的混乱,它掩盖了有用的行为的类。我们也需要记住,以保持它-通过手工或再生的方法从我们的IDE-我们每一次更改类领域。

所以我们可以做些什么来解决这些问题,而无需除去的方法完全?答案是 自动生成它. 项目龙目岛的 @ToString 注释 可以自动生成 toString 方法你在汇编时其中包括任何组合的领域,你选择。

基本样本使用情况:

@ToString
public class Foo {
    private int i = 0;
}

这将成为等同于以下列表的内容,在编写的时间:

public class Foo {
    private int i = 0;

    public String toString() {
        return "Foo(i=" + this.i + ")";
    }
}

我们正在抛弃我们的toString()方法之一的ConcurrentModificationException的,所以有一个偶然的缺点。当然,这是我们自己的过错不使其同步。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top