import java.util.List; import java.util.ArrayList; public class TomAccumulator implements StringAccumulator { private final List strings; private final boolean lazy; private int length; public TomAccumulator(boolean lazy) { strings = new ArrayList(); this.lazy = lazy; length = 0; } public TomAccumulator() { this(false); } public void accumulate(Object obj) { if (lazy && obj instanceof CharSequence) accumulate((CharSequence)obj); else accumulate(obj.toString()); } public void accumulate(String str) { accumulate((CharSequence)str); } private void accumulate(CharSequence s) { strings.add(s); length += s.length(); } public String toString() { StringBuilder sb = new StringBuilder(length); for (CharSequence s: strings) sb.append(s); return sb.toString(); } }