当然,除此之外,它们还与原语一起使用。我看到的大多数(如果不是全部)实现仅从程序员的角度来看有用。


编辑:我知道我应该覆盖默认行为,这就是我提到实现的原因:)。我确实得到了在 GUI 内需要字符串表示的某些组件中重写它的价值。然而,至少在 JDK 中,我看到 地段 仅当您需要调试对象实例时才会使用的实现。

为什么它植根于 Object 类,因为它似乎只对 GUI/调试东西有用?还有其他我不知道的用途吗?

有帮助吗?

解决方案

每当要的对象的字符串表示的toString()是有用的。自然发生这种情况为了调试的目的,但也可以是有效的操作的结果输出到用户。

例如,假设你有一个复杂的类,它可将复杂的数字。如果你想打印出来给用户喜欢的格式的 3 + 2I 的,这是很方便的,如果他们定义的toString(),你就不必每次都写的格式和输出将是是一致的。如果你想改变该表示,例如以 3 + 2J ,你只需要触摸toString()方法在复杂类。

所以的toString()不用于调试的目的也不过是让你的对象的一致字符串表示的好办法。

其他提示

没有,关键是你应该覆盖ToString()的默认实现变得有用。 ToString()可以是一个伟大的方式来输出的东西值返回到用户界面。

如果你有一个三串(第一,中间,最后)一个名称类的简单例子是。你可以有它格式化为一个UI方法ToString():“去年,一中”,例如

或存储数学运算的一类(左值= 2,右= 3,结果= 6和操作者枚举=乘法)。调用ToString()得到 “2 * 3 = 6”。

然而,它可能是更常见的有各种不同的方法To<qualifier>String(),像.NET DateTime类。 (ToShortDateString()ToLongDateString()ToLongTimeString(),...)

编辑:至于为什么它根植在Object类,它只是因为ToString()是一个有效的操作的任何

此外,字符串可以是数据类型和数据消费者之间编组的一个很好的方式,因为它是(几乎)保证是解析的,并且不需要额外的编码或护理。

我个人的偏好是应该的从不被用于除调试其他任何的toString()。如果你想制作一个对象的字符串,提供能清楚地证明你的意图(的getName(),getDescription()等),一个单独的方法。千万不要依靠的toString()的实现。

问题是,许多开发商看到的toString()作为一个调试级串并觉得没什么改变它的(比如新字段时添加或删除)。赫克,一些自动的toString()助洗剂使用反射来生成从字段一个toString()。

我发现这种偏好已经使我受益匪浅多年了。

我可以说的是,我有代码休息的时候我改变了我的类的toString显示一些额外的调试信息。

有问题的代码是一个GUI库,它决定使用的toString的价值一些内部的东西(这是一个几年前...我忘了这是完全一致)。最终的结果是,我没有使用该库了。

我要说的是,因为一大群人看到的toString为被用于调试(不管你的是什么,你认为它应该被用于意见),这是有问题的利用从它返回的值做任何事情,程序(如解析它),或者它显示给用户。

如果你在的的toString方法控制100%,然后通过各种手段做你想做的。

因此,要回答这个问题,没有任何的toString不仅对调试有用,你可以做你想做任何事的。但是,如果方法的toString变化,使你不快乐也不要惊讶。

在我的经验,的toString()具有调试和记录之外没有什么价值。你可以不依赖于它的格式或内容,随着时间的推移,所以不是被人类可读等,不依赖于它比简单的画线的其他任何东西(如原始对象类型)。如果有多个数据成员,预期它们可在类型或数量随时间而改变,和了toString(的输出)与它一起。

另外一点我想极力做。不要调用其他方法在你的toString()。无非检查在调试器上的断点的变量的内容,然后更具有更差的代码执行,因为在toString方法调用()的

我想点出谁回答提的人来说,这很重要“的toString”注意小写字母“T”一般谈论Java和谁回答提“的ToString”人们通常指的是C#。当然,这并不适用于所有的反应。

在我自己的观察(I同时使用每日),鼓励在C#程序员覆盖“的ToString”以显示有用的文本表示。然而,在Java中,我没有看到这个几乎一样多。事实上,我很少看到这一点。

-jP

首先, toString 方法应该返回对象的人类可读的文本表示。

这个问题被提出来 有效的Java 作为 第 10 项:始终覆盖 toString.

它引用了 Java API 规范 为了 Object.toString 方法:

结果应该是一个简洁但有益的表示,一个人很容易阅读。

除了调试之外,还可以覆盖 toString 将对象添加到类中时,类的方法可能很有用 JList 或一个 JTable, ,默认情况下将使用 toString 方法将对象以文本形式显示在列表或表格中。

例如,就我而言,我已经覆盖了 toString 添加到对象的方法 JList 以便用户能够通过 GUI 查看列表中项目的信息。

所以,确实存在这样的情况 toString 方法对于调试以外的情况很有用。关键是要有 toString 方法返回对人们实际有用的信息,而不是默认信息 Object.toString 对象的内存位置用于其文本表示的实现。

对...有用

  1. Gui(使用 PropertyGrid 时的复杂属性、表单标题文本)
  2. 数据绑定(这就是它的工作方式)

以及任何其他字符串输出。

的ToString()也由打印任何物体出到串隐含时.NET框架调用。

Console.WriteLine("My Object is" + object.ToString());

等同于

Console.WriteLine("My Object is" + object);

,因为的ToString()被隐式地调用。

我相信,虽然我不知道,它是使用调试器为对象的“价值”。这可以是相当得心应手,虽然有限。在大多数情况下,编写自己的调试器可视将是一个更好的主意。

在AS3,我不得不2D阵列转换成一维数组。最快(运行速度)和最简单的(编码时间)溶液:

var new1DArray:Array = the2DArray.toString().split(",");

感到惊讶,但它的实际工作为目的和相当快呢!

我使用的ToString()一吨日期时间格式。

http://hunterconcepts.com/content/tools/formats/

使用称它为控制时除了其他人都已经表示,它将覆盖toString()方法也很有用。例如,组合框:

myComboBox.Items.Add(new MyClass());
// now, whatever ToString() returns is shown in the
// ComboBox, but you can get the object back by through
// the SlectedItem property.

这可能不是“预期”的使用,但我已经用它的数据序列化

storeToHardDrive(studentList.ToString());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top