code: public class Accumulator {
      private Long sumA; // non-null if we're working in the integer domain
      private double sumB;
      public Accumulator(Number sum0) {
  	if (sum0 instanceof Double) {
  	    sumB = sum0.doubleValue();
  	} else {
  	    sumA = sum0.longValue();
  	}
      }
      public Number call(Number n) {
          if (sumA != null) {
  	    if (n instanceof Double) {
  		sumB = n.doubleValue() + sumA;
  		sumA = null;
  		return sumB;
  	    }
              return sumA += n.longValue();
          }
          return sumB += n.doubleValue();
      }
  
      public static void main(String[] args) {
          Accumulator x = new Accumulator(1);
          x.call(5);
          Accumulator y = new Accumulator(3);
          System.out.println(y+" has value "+y.call(0));
          System.out.println(x.call(2.3));
      }
  }
  