code: @Override
      public <T> T get(String name, Class<T> type) {
          Object value = get(name);
          if (value == null) {
              value = findInherited(name, type);
              if (value == null) {
                  value = UNDEFINED;
              }
              put(name, value); // cache the found value
          }
          return value != UNDEFINED ? type.cast(value) : null;
      }
docs: Gets an inherited value.
  
  @param name the property name or path
  @param <T>  the expected type of the value
  @return inherited value if existing or <code>null</code>