1

I wanted to create my own StringBuffer which has 2-3 more methods added to the java.lang.StringBuffer. Since the original class is final I cannot extend that class.

Now, If I copy paste the class into my own class, then it says 'AbstractStringBuilder is not visible' error.

How to extend this class in my own namespace (say com.util).

4

4 回答 4

6

我会使用StringBuilder 而不是 StringBuffer

不幸的是,您无法实现表示的接口StringBuilder(除非Appendable适合?)。您是否尝试过创建一个EnhancedStringBuilder包含您StringBuilder作为成员的类。然后,您可以将大多数(全部?)调用委托给它,并提供您自己的调用。

另一种方法是简单地获取 StringBuilder 的 OpenJDK 源代码并重新打包和增强它。我认为许可将允许这样做,但我不熟悉您的情况,您应该检查一下。

于 2012-12-11T11:30:25.003 回答
6

我个人会为此使用装饰器模式- 一个包装原始 StringBuilder 的类,然后提供额外的方法以供适当使用。

如果您只想添加更多方法,您可能还想看看使用等效的静态方法来完成这项工作。

(正如其他人所提到的,StringBuilder 是比 StringBuffer 更好、更有效的选择,除非你真的需要后者提供的线程安全。)

简单地复制和粘贴代码不是一个好主意,您可能会违反许可法并复制功能(即使该功能在原始 API 中。)

于 2012-12-11T11:31:11.257 回答
5

撇开潜在的许可问题不谈,我不建议仅仅为了添加几个方法而复制和粘贴源代码。相反,我建议制作这些方法static并将它们放入一个辅助类(调用它StringBuilderUtils或类似的东西)。

这些方法将采用 or 的实例StringBuilderStringBuffer或者即使Appendable您可以根据 来实现您的功能Appendable)。

于 2012-12-11T11:29:46.140 回答
0

您也可以复制 AbstractStringBuilder 。但我不知道那个的依赖关系。我的建议是为 StringBuilder 创建一个 Wrapper 类,并将其封装。

不用担心性能,使用 StringBuilderWrapper 可以很容易地将委托调用内联到类中。

于 2012-12-11T11:31:48.887 回答