code: public <T> T getProperty(String key, T defaultValue) {
          Class<T> type = PropertyUtil.getType(defaultValue);
          T value = getProperty(key, type);
          return value != null ? value : defaultValue;
      }
docs: property access