code: 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;
      }
docs: 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