@SuppressWarnings("unchecked")
    public <T> T get(Option<T> key) {
        T v = (T) this.values.get(key);
        if (v == null) {
            v = key.defaultValue();
            this.values.put(key, v);
        }
        return v;
    }
@ SuppressWarnings ( "unchecked" ) public < T > T get ( Option < T > key ) { T v = ( T ) this . values . get ( key ) ; if ( v == null ) { v = key . defaultValue ( ) ; this . values . put ( key , v ) ; } return v ; }
Retrieve a value under a given key.

@param key The key.
@param <T> The type of the value.
@return The previously stored value, or the default provided by key if none has been previously stored.  The default will then be stored.