@SuppressWarnings("unchecked")
    @Nullable
    public <T> T getProperty(final String key, final T defaultValue) {
    """
	Gets the property with the given key.
	
	@param key the key
	@param defaultValue the default value
	@param <T> the property value type
	@return the property value, or the default value if the property is not defined
    """
        notNull("key", key);

        T value = (T) properties.get(key.toLowerCase());
        return (value == null && !properties.containsKey(key)) ? defaultValue : value;
    }
@SuppressWarnings("unchecked")
    @Nullable
    public <T> T getProperty(final String key, final T defaultValue) {
        notNull("key", key);

        T value = (T) properties.get(key.toLowerCase());
        return (value == null && !properties.containsKey(key)) ? defaultValue : value;
    }
@ SuppressWarnings ( "unchecked" ) @ Nullable public < T > T getProperty ( final String key , final T defaultValue ) { notNull ( "key" , key ) ; T value = ( T ) properties . get ( key . toLowerCase ( ) ) ; return ( value == null && ! properties . containsKey ( key ) ) ? defaultValue : value ; }
Gets the property with the given key.

@param key the key
@param defaultValue the default value
@param <T> the property value type
@return the property value, or the default value if the property is not defined
Gets the property with the given key .