我想创建我自己的StringBuffer,它在java.lang.StringBuffer中添加了2-3个方法。由于原始类是final类,所以我不能扩展该类。
现在,如果我将类复制粘贴到我自己的类中,那么它会显示'AbstractStringBuilder is not visible‘错误。
如何在我自己的命名空间中扩展这个类(比如com.util)。
发布于 2012-12-11 19:30:25
我会和StringBuilder rather than StringBuffer一起工作。
不幸的是,您不能实现表示StringBuilder
的接口(除非Appendable合适?)。您是否尝试过创建包含StringBuilder
作为成员的EnhancedStringBuilder
类。然后,您可以委托大多数(所有?)调用它,并提供您自己的。
另一种选择是简单地take the OpenJDK source code for StringBuilder并重新打包和增强它。我认为许可证会允许这样做,但我不熟悉你的情况,你应该检查这个。
发布于 2012-12-11 19:31:11
为此,我个人会使用decorator pattern -一个包装原始StringBuilder的类,然后提供额外的方法以供适当使用。
如果您只想再添加几个方法,那么您可能还需要考虑使用等效的静态方法来完成这项工作。
(正如其他人所提到的,StringBuilder是比StringBuffer更好、更有效的选择,除非您确实需要后者提供的线程安全性。)
简单地复制和粘贴代码并不是一个好主意,您可能会违反许可规则并复制功能(即使该功能位于原始API中)。
发布于 2012-12-11 19:29:46
抛开潜在的许可问题不谈,我不建议仅仅为了添加几个方法而复制和粘贴源代码。相反,我建议将这些方法设置为static
,并将它们放入帮助器类(称为StringBuilderUtils
或类似的类)。
这些方法将使用StringBuilder
或StringBuffer
的实例(如果可以用Appendable
实现功能,甚至可以使用Appendable
)。
https://stackoverflow.com/questions/13819387
复制相似问题