code: public Double getDoubleOrNull(String key) throws IllegalStateException {
  		Type type = stateMap.get(key);
  		if (type == null) {
  			return null;
  		}
  		switch (type) {
  			case NULL:
  				return null;
  			case DOUBLE:
  				Object obj = get(key);
  				if (obj instanceof Double) {
  					return (Double) obj;
  				} else if (obj instanceof Float) {
  					return (double) (Float) obj;
  				} else {
  					throw new IllegalStateException("unexpected class. class="
  							+ obj.getClass().getCanonicalName());
  				}
  			default:
  				throw new IllegalStateException("unexpected token. token=" + type);
  		}
  	}
docs: Retrieves the corresponding value of the given key as double-precision floating point number.<br>
  If it is neither {@code null} nor a {@link Double}, {@link IllegalStateException} will be thrown.
  @param key
  @return The value
  @throws IllegalStateException The given index points neither {@code null} nor a {@link Double}.
  @author vvakame