2

StringBuilderappend の各呼び出しの間に新しい行を追加するように Java クラスを構成することは可能ですか?

4

1 に答える 1

3

StringBuilderその機能が組み込まれているとは思わない。ただ拡張することはできないので、デコレータパターンを使用してみることができます...

class NewlineStringBuilder {

    private StringBuilder delegate;

    public NewlineStringBuilder() {
        delegate = new StringBuilder();
    }

    public NewlineStringBuilder appendLine(String str) {
        delegate.append(str).append("\n");
        return this;
    }

    public String toString() {
        return delegate.toString();
    }
}

別の方法として、Java はこの短縮形をサポートできます。これは、装飾されたクラスから利用可能にする必要があるすべてのメソッドをデコレーターが再実装する必要がないという点で便利ですが、生のリソースが完全に公開されていないため、トレードオフが発生するため、より危険です。計量する必要があります:

StringBuilder message = new StringBuilder();
class AppendingStringBuilder {
    private final StringBuilder builder;
    AppendingStringBuilder(StringBuilder builder) {
        this.builder = builder;
    }
    public AppendingStringBuilder append(String str) {
        builder.append(str + "\n");
        return this;
    }
}
AppendingStringBuilder messageHelper;
// ...
于 2012-12-06T16:35:01.663 に答える