2012-12-11 2 views
1

java.lang.StringBuffer에 2-3 개의 메소드가 추가 된 자체 StringBuffer를 만들고 싶습니다. 원래 클래스가 최종 클래스이기 때문에 클래스를 확장 할 수 없습니다.향상된 StringBuffer - Java.Lang

이제 클래스를 내 클래스에 붙여 넣으면 'AbstractStringBuilder not visible'오류가 발생합니다.

내 이름 공간에서이 클래스를 확장하는 방법 (예 : com.util).

+6

StringBuffer에는'Copyright (c) 2006, 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 또는 이와 비슷한 이름으로 지정). (당신이 Appendable의 측면에서 귀하의 기능을 구현할 수 있다면, 아마도 심지어 Appendable)

방법은 StringBuilder 또는 StringBuffer의 인스턴스를 취할 것입니다.

+0

이것은 공개 API를 통해 구현할 수있는 필수 기능에 달려 있습니다. –

6

나는 StringBuilder rather than StringBuffer으로 작업 할 것입니다.

(Appendable이 적합하지 않은 경우)을 나타내는 인터페이스를 구현할 수 없다니 불행합니다. 회원으로 StringBuilder을 포함하는 EnhancedStringBuilder 클래스를 만들려고 했습니까? 그런 다음 대부분의 (모든?) 호출을 위임 할 수 있고 자신 만의 호출을 제공 할 수 있습니다.

대안은 간단히 take the OpenJDK source code for StringBuilder이며 리 패키징 및 향상입니다. 나는 라이센스가 이것을 허락 할 것이라고 생각하지만, 나는 네 상황에 익숙하지 않고 이것을 확인해야한다.

+2

에 주목하면 라이선스는 전체 애플리케이션 GPLv2 라이선스가 필요합니다. –

6

개인적으로는 decorator pattern을 사용합니다. 원래 StringBuilder를 래핑 한 클래스가 적절하게 사용할 수있는 추가 메서드를 제공합니다.

두 개 이상의 메소드 만 추가하려는 경우 해당 작업을 수행하는 동일한 정적 메소드 만 사용하는 것이 좋습니다. (다른 사람이 언급 한 것처럼, 모두 StringBuilder가 StringBuffer를 통해 더 나은, 더 효율적인 선택은 당신이 정말. 후자가 제공하는 스레드 안전을 필요로하지 않는 한)

간단히 복사하고 코드를 붙여

은 좋은 생각이 아니다 라이선스 법을 위반하고 기능을 복제 할 가능성이 있습니다 (해당 기능이 원래 API에있는 경우에도 마찬가지입니다).

0

AbstractStringBuilder도 복사 할 수 있습니다. 그러나 나는 그것의 의존성을 모른다. 내 권장 사항은 StringBuilder에 대한 래퍼 클래스를 만들고 캡슐화하는 것입니다.

성능에 대해 걱정할 필요없이 대리자 호출은 StringBuilderWrapper를 사용하여 클래스에 인라인 될 수 있습니다.