为什么StringBuilder是最终的 - 与所有最终方法相比?

Ed *_*aub 7 java

这是我对StringBuilder最佳实践早期问题的答案("一厢情愿").如果StringBuilder是可扩展的,那么特定于域的子类可以扩展其流畅的接口,这将收紧StringBuilder传递给许多构建更大字符串部分的方法的代码.

我正在考虑向番石榴人提出建议 - 也许是StringBuilder委托.

StringBuilder最终有什么额外的目的,而不是只有最终的方法?

DJC*_*rth 9

如果所有方法都是final,则无法修改StringBuilder的当前行为.它的子类必须添加未连接的行为(本质上是糟糕的设计)或使用旧的新功能,如便利方法.如果你想做后者,最好有一个提供相关功能但包含StringBuilder而不是扩展它的类.正如约书亚布洛赫所说,"宁愿遏制继承".简而言之,如果所有方法都是最终的,那么没有充分的理由来扩展课程,你也可以将它作为最终方法.

  • 您当然不需要在每个子类中委派StringBuilder中的所有方法,并且子类肯定需要访问它们中的许多方法,以便执行诸如builder.appendMyBeginning()。append('。')之类的操作。 .appendMyEnd()`。因此,在实践中,您是否建议使用具有相同方法集的泛型委托,然后将其子类化? (2认同)