StringBuilder
Java和Java之间的差异StringBuffer
有据可查,并且在 StackOverflow中也有所涉及。
基本上,StringBuilder
它是 的非同步副本StringBuffer
,具有几乎相同的界面,因为它旨在作为StringBuffer
. 它们的 API 实际上是相同的,它们实际上是当前 JDK 中同一个不可访问抽象类的子类。
因此,我想知道的一件事是为什么它们没有公开相关。让这两个类都实现一个公共接口,甚至StringBuffer
作为一个子类都是StringBuilder
有意义的,允许两个类共享代码。
那么为什么要强制分离呢?是为了让程序员不会无意中将线程安全代码与线程不安全代码混为一谈吗?或者它只是一个设计疏忽,现在将被继承到永恒的尽头?
编辑:
说清楚:我可以推测为什么会这样,但我希望具体参考实际决策,例如在 JSR 过程中。对我来说,任何能说明什么是偶尔会引起一定困难的情况的事情。
编辑2:
这两个类都实现Appendable
了我的想法。可能是因为该特定接口对于大多数用途来说是无用的——它只能附加一个字符或一个准备好的对象,仅此而已。在大多数情况下,它并不比两个类都是Object
.
编辑 3:
好吧,这是来自半官方来源的这个问题的基本原理:
图书馆团队的评价:
根据设计,StringBuffer 和 StringBuilder 不共享公共的公共超类型。它们不是替代品:一个是错误(StringBuffer),另一个(StringBuilder)是它的替代品。
显然,在某些情况下,缺少通用超类型会减慢从 StringBuffer 到 StringBuilder 的预期迁移。另一方面,通过添加一个通用的超类型,我们将把我们过去的错误记录在一个公共界面中,以便永远与我们同在。这不仅会减慢迁移速度:还会使其脱轨。