【问题标题】:Java Language Design with toString使用 toString 进行 Java 语言设计
【发布时间】:2010-07-23 15:13:28
【问题描述】:

我们是否决定不为int[] 实现toString 方法,而是让它从Object 继承toString 方法?

【问题讨论】:

  • 如果你需要这个功能……你知道java.util.Arrays.toString……吗?
  • @Konrad,但使用实用程序类是一个糟糕的设计选择,恕我直言,它只是一个实用的类。
  • @Peter:我没有为它辩护。就我而言,Java 是一系列糟糕的设计选择。
  • @Konrad,16 年多来,你一定会做一些。不是每个人都同意如何最好地解决它们。 ;)

标签: java language-design


【解决方案1】:

他们确实为数组实现了更合理的toString 方法。它们位于java.util.Arrays 类中。

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

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

【讨论】:

  • 实际上将 Object 更改为对数组有一个合理的 toString() 非常容易,只是不推荐。更好的 int[] 有自己的类,它知道它的类型可以做 toString(int[]) 所做的事情。
  • changing Object to have a sensible toString() for arrays?您是否建议修补 sun 源代码?
  • Sun 一直在对源代码进行修复和发布,Java 6 更新到 21。
【解决方案2】:

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

他们给了你一个默认值,如果你想把它做成别的东西很容易做到。

你可以使用 apache 的 ToStringBuilder 让它更简单...

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

【讨论】:

  • 不仅如此,在包含 100,000 个元素的数组上调用 toString() 可能是灾难性的。而toString() 的目的不仅仅是显示一个对象的内容,而是显示一个人类可读的形式来显示在工具、调试器等中
【解决方案3】:

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

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

诚然,这很烦人,有时我确实认为"Array[" + size + "] of " + getClassName() 这样的东西会比默认设置好得多。

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      相关资源
      最近更新 更多