当前位置: 首页 > 面试题库 >

为什么StringBuilder是final-与拥有所有final方法相比?

路扬
2023-03-14
问题内容

这样做的动机是我对StringBuilder最佳实践的一个较早问题的回答(“如意算盘”)。如果StringBuilder是可扩展的,则特定于域的子类可以扩展其流畅的接口,这将使StringBuilder传递给构建较大字符串部分的许多方法的代码更加严格。

我正在考虑为番石榴人士提供一些建议-也许是StringBuilder代表。

与仅使用final方法相比,StringBuilder用作final有什么其他目的?


问题答案:

如果所有方法都是最终方法,则无法修改StringBuilder的当前行为。它的子类必须添加未连接的行为(本质上是不良的设计)或使用旧方法的新功能(例如便捷方法)。如果要html" target="_blank">执行后者,则最好提供一个提供相关功能但包含StringBuilder而不是对其进行扩展的类。正如约书亚·布洛赫(Joshua
Bloch)所说,“更喜欢围护而不是继承”。简而言之,如果所有方法都是最终方法,则没有充分的理由扩展该类,您也可以将其设为最终方法。



 类似资料:
  • 问题内容: 根据JLS: 15.9.5匿名类声明编译器会自动从类实例创建表达式派生匿名类声明。 匿名类从不抽象(第8.1.1.1节)。匿名类始终是内部类(第8.1.3节);它永远不是静态的(第8.1.1节,第8.5.2节)。 匿名类始终是隐式最终的(第8.1.1.2节) 。 这似乎是一个特定的设计决定,所以它有一定的历史。 如果我选择上这样的课: 如果选择的话,为什么不允许我再次对其进行子类化?

  • 我试图为一个类单元okhttp3编写单元测试,但我一直在模仿okhttp3.Response类。

  • 本文向大家介绍final 在 Java 中有什么作用?相关面试题,主要包含被问及final 在 Java 中有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 final 修饰的类叫最终类,该类不能被继承。 final 修饰的方法不能被重写。 final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

  • 问题内容: 我对C#非常熟悉,但是开始在Java中工作更多。我希望了解到Java中的枚举基本上与C#中的枚举等效,但是显然并非如此。最初,我很高兴得知Java枚举可以包含多条数据,这似乎非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。但是,从那时起,我发现了很多C#缺少的功能,例如能够轻松地将枚举元素分配给某个值

  • 问题内容: 好吧,我有两个StringBuilder对象,我需要在Java中对其进行比较。我知道我可以做的一种方法是 但这意味着我要创建两个String对象,还有没有更好的方法来比较StringBuilder对象。也许您不需要创建其他对象的地方? 问题答案: 如您所知,继承自,因此仅在将同一对象作为参数传递时才返回true。它并 没有 比较两个内容小号! 如果您查看源代码,您将得出结论,最有效的比

  • 我找不到如何在AspectJ1.9.1中排除所有final方法。我在这里找到了早期版本的答案,但我无法使其工作。