题
当然,除此之外,它们还与原语一起使用。我看到的大多数(如果不是全部)实现仅从程序员的角度来看有用。
编辑:我知道我应该覆盖默认行为,这就是我提到实现的原因:)。我确实得到了在 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
对象的内存位置用于其文本表示的实现。
对...有用
- Gui(使用 PropertyGrid 时的复杂属性、表单标题文本)
- 数据绑定(这就是它的工作方式)
以及任何其他字符串输出。
的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()一吨日期时间格式。
使用称它为控制时除了其他人都已经表示,它将覆盖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());