2010-07-23 41 views
9

我们是否决定不执行int[]toString方法,而是让它继承ObjecttoString方法?使用toString的Java语言设计

+5

如果你需要的功能...你知道'java.util.Arrays.toString' ...吗? – 2010-07-23 15:15:48

+0

@Konrad,但它是一个糟糕的设计选择使用工具类,只是一个实用的一个恕我直言。 – 2010-07-23 15:52:03

+0

@彼得:我没有捍卫它。就我而言,Java是一系列糟糕的设计选择。 – 2010-07-24 10:53:35

回答

8

他们确实为阵列实施了更合理的toString方法。他们位于java.util.Arrays班。

至于推理。我假设在Arrays类中提供的覆盖,试图为不同类型的数组实现通用toString要么复杂要么不可能。 toString方法将不得不知道它正在处理什么类型的数组,并且适当地输出数据。例如,Object[]必须在每个元素上使用toString,而char[]必须输出该字符,并且数字数据类型必须转换为数字字符串。

Arrays中的方法免费得到这个,因为这些类型是由于覆盖而固定的。

+1

事实上,将Object改为对数组有一个合理的toString()非常简单,只是不推荐。甚至更好的int []有它自己的类,它知道它的类型可以做什么toString(int [])。 – 2010-07-23 15:49:55

+0

'改变对象有一个明智的toString()为数组'?您是否打算修补sun源代码? – 2010-07-23 18:36:19

+0

Sun一直对源代码进行修复和发布,Java 6已经升级到了21. – 2010-07-28 06:02:23

2

我猜想是因为以下原因:他们如何知道用户如何展示他们的数组?它可能“数组大小:10”或它可能是“[x,y,z]”。

他们给了你一个默认值,如果你想使其他东西很容易做到。

您可以使用Apache的ToStringBuilder使其更容易...

http://commons.apache.org/lang/api/org/apache/commons/lang/builder/ToStringBuilder.html

+2

不仅如此,在一个包含100,000个元素的数组上调用'toString()'可能是灾难性的。 'toString()'的目的不仅仅是显示一个对象的内容,而且还要显示一个可读的形式以显示在工具,调试器等中。 – 2010-07-23 15:59:50

2

我的猜测是,由于Array对象是在Java源代码的语言设计者不会创建 - 他们被创建Java编译器。请记住,您可以拥有任何对象类型的数组,因此编译器会根据您需要的类型适当地创建Array对象。

如果他们要创建一个标准的方法,它应该如何工作并不明显。例如,执行toString()并连接结果可能适用于小数组,但它不适用于多维数组或具有1,000个条目的数组。所以我认为没有创建toString()方法来保持所有数组一致。

不可否认,这是令人讨厌的,有时候我认为沿着"Array[" + size + "] of " + getClassName()的路线会比默认好得多。

+0

我认为,这个的第一部分会触及它在头上。 – 2010-07-23 15:44:23

1

猜测有点这里,但是...

没有一个int数组的一个明显的字符串表示。人们以不同的方式做到这一点:逗号分隔,空格分隔,括在括号或括号中或者什么都不用。这可能会促使决定不在Java 1.1中实现它,同时它也是低优先级的代码(因为任何人都可以实现一种方法,将一个数组作为一个字符串自己编写,非常简单)。

现在,您无法在Java 1.2或更高版本中升级它,因为这会破坏已使用旧行为的任何人的兼容性。但是,您可以添加一个实现一些功能的实用程序类,这就是他们对java.util.Arrays所做的。