1  import java.util.Arrays;
  2  
  3  public class Stack<E>
  4  {
  5     private Object[] elements;
  6     private int currentSize;
  7     
  8     private static final int INITIAL_SIZE = 10;
  9  
 10     public Stack()
 11     {
 12        elements = new Object[INITIAL_SIZE]; 
 13        // elements = new E[INITIAL_SIZE] 
 14        // is an error--cannot make a generic array
 15     }
 16  
 17     public void push(E value)
 18     {
 19        if (currentSize >= elements.length) 
 20        {
 21           elements = Arrays.copyOf(elements, 2 * elements.length);
 22        }
 23        elements[currentSize] = value;
 24        currentSize++;
 25     }
 26  
 27     @SuppressWarnings("unchecked") // Suppresses "unchecked" warnings inside this method
 28     public E pop()
 29     {
 30        currentSize--;
 31        return (E) elements[currentSize]; // Cast causes "unchecked" warning
 32     }
 33     
 34     public int size() { return currentSize; }
 35  }