public <T> DynamicContextualProperty<T> getContextualProperty(String propName, T defaultValue, final Runnable propertyChangeCallback) {
        checkAndWarn(propName);
        DynamicContextualProperty<T> property = new DynamicContextualProperty<T>(propName, defaultValue);
        addCallback(propertyChangeCallback, property);
        return property;
    }
public <T> DynamicContextualProperty<T> getContextualProperty(String propName, T defaultValue, final Runnable propertyChangeCallback) {
        checkAndWarn(propName);
        DynamicContextualProperty<T> property = new DynamicContextualProperty<T>(propName, defaultValue);
        addCallback(propertyChangeCallback, property);
        return property;
    }
public < T > DynamicContextualProperty < T > getContextualProperty ( String propName , T defaultValue , final Runnable propertyChangeCallback ) { checkAndWarn ( propName ) ; DynamicContextualProperty < T > property = new DynamicContextualProperty < T > ( propName , defaultValue ) ; addCallback ( propertyChangeCallback , property ) ; return property ; }
Create a new contextual property of type T

@param propName               property name
@param defaultValue           default value if the property is not defined in underlying configuration
@param propertyChangeCallback a Runnable to be called when the property is changed
@param <T>                    the type of the property value
Create a new contextual property of type T