samples/individualsamples/src/org/apidesign/samples/StringBuffer.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 30 Oct 2014 20:46:27 +0100
changeset 408 9a439a79c6d0
permissions -rw-r--r--
Use scala 2.10.4 to compile on JDK8
     1 package org.apidesign.samples;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 public class StringBuffer {
     7     private List<String> all = new ArrayList<String>();
     8     
     9     public StringBuffer() {
    10         // prevent subclassing from 3rd party code
    11         if (getClass() != StringBuffer.class && getClass() != StringBufferUnsynch.class) {
    12             throw new IllegalStateException();
    13         }
    14     }
    15     
    16     // BEGIN: string.buffer.factory
    17     public static StringBuffer createUnsynchronized() {
    18         return new StringBufferUnsynch();
    19     }
    20     // END: string.buffer.factory
    21     
    22     public synchronized StringBuffer append(String s) {
    23         return appendImpl(s);
    24     }
    25     
    26     @Override
    27     public synchronized String toString() {
    28         return toStringImpl();
    29     }
    30     
    31     final String toStringImpl() {
    32         String ret = "";
    33         for (String s : all) {
    34             ret += s;
    35         }
    36         return ret;
    37     }
    38     
    39     
    40     final StringBuffer appendImpl(String s) {
    41         all.add(s);
    42         return this;
    43     }
    44     
    45     
    46     private static final class StringBufferUnsynch extends StringBuffer {
    47         @Override
    48         public StringBuffer append(String s) {
    49             return appendImpl(s);
    50         }
    51         @Override
    52         public String toString() {
    53             return toStringImpl();
    54         }
    55     }
    56 }