【问题标题】:Why doesn't Java standard libraries implement toString methods? [closed]为什么 Java 标准库不实现 toString 方法? [关闭]
【发布时间】:2012-12-19 08:26:43
【问题描述】:

Object.toString()JavaDoc 说:

返回对象的字符串表示形式。通常,toString 方法返回一个“以文本形式表示”该对象的字符串。

尽管如此,很多标准的 java 类,如 Collections(Sets、Lists 等)可能有一个非常有用的 toString() 方法,不要费心去实现它。这种愚蠢是有原因的吗?

或者,你想要一个十六进制字符串吗? :)

编辑:糟糕,这是我使用 IDE 的失败。我遵循了界面而不是实现,并且出于某种原因直接将我带到了Object.toString()

【问题讨论】:

  • 哪些集合类没有实现 toString?我认为他们都实现了它(ArrayList,HashMap,HashSet)
  • Collections 是一个实用类,所以我没有任何好的理由使用 toString 方法。如果您的意思是 Java 中的 Collection 接口,那么所有函数都是虚拟的,因此调用实现中的 toString ,在大多数情况下会被覆盖。
  • java.util.Collections 不可实例化,为什么需要重写 toString() 呢?
  • Collections 是一个实用程序类。有一个 toString 方法会有什么用?

标签: java


【解决方案1】:

UPD:

如果您的意思是 Collection 类,那么答案将是: 这不完全是这样。许多Collection 类覆盖了这个方法;例如,AbstractCollection 类,它有自己的 toString 实现 - 所有继承的类都通用。

如果你的意思是Collection[s],那么这个类有一个私有构造函数,不能实例化;所以一个特殊的toString 方法是没有意义的。

【讨论】:

  • 他提到 Collections 是一个 util 类而不是 Collection 是一个接口。
  • @gregory561,恐怕那位作者印错了。
  • 在这种情况下,问题没有任何意义,因为 Collection 接口没有扩展/实现对象?其中有 toString 方法。即使这样做了,也不可能在 iterface 中实现此方法
【解决方案2】:

如果您在谈论Collections 类,它是实用程序类,没有必要重写 toString() 方法。通常,对于实用程序类,我们将构造函数设为私有并提供静态方法。

还要检查你不能创建 Collections 类的对象,因为它的构造函数是私有的。检查java.util.Collectionssource,行号56

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2020-01-04
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多