code: public String getStringOrNull(String key) throws IllegalStateException {
  		Type type = stateMap.get(key);
  		if (type == null) {
  			return null;
  		}
  		switch (type) {
  			case NULL:
  				return null;
  			case STRING:
  				return (String) get(key);
  			default:
  				throw new IllegalStateException("unexpected token. token=" + type);
  		}
  	}
docs: Retrieves the corresponding value of the given key as string.<br>
  If it is neither {@code null} nor a {@link String}, {@link IllegalStateException} will be thrown.
  @param key
  @return The value
  @throws IllegalStateException The given index points neither {@code null} nor a {@link String}.
  @author vvakame