2012-12-11 22 views
1

我想創建自己的StringBuffer,它有2-3個添加到java.lang.StringBuffer的方法。由於原來的課程是最終的,我不能延續這個課程。一個改進的StringBuffer - Java.Lang

現在,如果我將該類複製粘貼到我自己的類中,那麼它會顯示'AbstractStringBuilder不可見'錯誤。

如何在我自己的命名空間(比如說com.util)擴展這個類。

+6

您是否注意到StringBuffer擁有版權(c)2006,Oracle和/或其附屬公司。版權所有。 * ORACLE專有/保密。使用受限於許可條款。 –

+0

你想添加什麼方法?您正在複製哪個課程粘貼? –

+1

@Denis - 是目前的? OpenJDK StringBuilder似乎是GPLed(IANAL)。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java –

回答

5

不考慮潛在的許可問題,我不建議複製和粘貼源代碼只是爲了添加幾個方法。相反,我會建議製作這些方法static並將它們放到助手類中(稱爲StringBuilderUtils或類似的東西)。

的方法將採取的StringBuilderStringBuffer實例(甚至Appendable如果你能在Appendable方面實現你的功能)。

+0

這確實取決於通過公共API可實現的所需功能。值得注意的 –

6

我會與StringBuilder rather than StringBuffer一起工作。

不幸的是,您無法實現代表StringBuilder的接口(除非Appendable合適?)。您是否嘗試創建一個包含您的StringBuilder作爲成員的EnhancedStringBuilder類。然後,您可以將大多數(所有?)電話委派給此人,並提供您自己的電話。

另一種方法是簡單地take the OpenJDK source code for StringBuilder並重新打包並加強它。我認爲許可將允許這樣做,但我不熟悉你的情況,你應該檢查這一點。

+2

許可證將需要使整個應用程序GPLv2許可。 –

6

我個人會使用decorator pattern這個 - 一個包裝原始StringBuilder的類,然後提供額外的方法以適當地使用。

如果您只想添加更多方法,您可能還需要使用等效的靜態方法來完成這項工作。

(正如其他人所說,StringBuilder的是在StringBuffer的更好的,更有效的選擇,除非你真的需要線程安全後者提供。)

簡單地複製和粘貼代碼是不是一個好主意,您可能會違反許可法律和複製功能(即使該功能位於原始API中)。

0

您也可以複製AbstractStringBuilder。但我不知道那個依賴關係。我的建議是爲StringBuilder創建一個Wrapper類,並封裝它。

不用擔心性能,委託調用可以很容易地使用StringBuilderWrapper內聯到類中。