/** * Returns the value to which the specified key is mapped, or null if this map contains no mapping * for the key. Safe version of get(). * * <pre>{@code * Integer i = <Integer> map.get(key1, Integer); * }</pre> * * @param key key with which the specified value is to be associated. * @param type expected type. * @param defaultValue default value to return. * @param <T> type of return and default value, inferred * @return Value. */ public <T> T get(ExtKey key, Class<T> type, T defaultValue) { if (!key.getType().isAssignableFrom(type)) { throw new IllegalArgumentException( String.format("Cannnot assign key '%s' into type '%s'", key, type)); } if (defaultValue != null && !key.getType().isAssignableFrom(defaultValue.getClass())) { throw new IllegalArgumentException( String.format( "Cannnot assign default value of '%s' into type '%s'", defaultValue.getClass(), key)); } T value = type.cast(map.get(key)); if (value == null) { value = defaultValue; } return value; }
/** * Returns the value to which the specified key is mapped, or default. Unsafe method of get with * cast. * * <pre>{@code * Integer i = <Integer> map.get(key1, 5); * }</pre> * * @param key key. * @param defaultValue default value. * @param <T> type of return and default value, inferred * @return Value. */ @SuppressWarnings("unchecked") public <T> T get(ExtKey key, Object defaultValue) { if (defaultValue != null && !key.getType().isAssignableFrom(defaultValue.getClass())) { throw new IllegalArgumentException( String.format( "Cannnot assign default value of '%s' into type '%s'", defaultValue.getClass(), key)); } Object value = get(key); if (value == null) { value = defaultValue; } return (T) value; }
/** Check if value matches key type. */ private void checkKeyValue(ExtKey key, Object value) { if (!key.getType().isInstance(value)) { throw new IllegalArgumentException( String.format("Cannnot assign type '%s' into key '%s'", value.getClass(), key)); } }