Как получить значения по умолчанию из java.util.Свойства

#java #properties

#java #свойства

Вопрос:

Properties Объект содержит карту пар ключ-значение и дополнительно Properties защищенное поле «по умолчанию».

Можно перебирать ключи через keySet() , чтобы получить ключи свойств текущего Properties , а также через stringPropertyNames() , чтобы получить все отдельные ключи, включая ключи в «defaults» Properties .

Я хотел бы написать метод, который, учитывая Properties экземпляр, возвращает эти «значения по умолчанию», включая ключи и значения.

Повторения stringPropertyNames() и пропуска значений, включенных в keySet() , недостаточно, поскольку записи в «defaults» могут быть скрыты записями в текущем Properties . Доступ к защищенному полю «defaults» через отражение покажет вывод предупреждения и может не работать в будущих версиях Java.

Ответ №1:

Properties.clone() Метод создаст новый Properties объект, включающий значения по умолчанию. Этот клон можно очистить, и останутся «значения по умолчанию»:

 public static Properties getDefaultProperties(final Properties properties) {
    // use a clone to not modify the supplied properties
    final Properties clone = (Properties) properties.clone();
    // since we cannot access the default properties, we simply remove all non-default
    clone.clear();
    // what remains are the default properties that we will copy
    final Properties defaultProperties = new Properties();
    for (final String property : clone.stringPropertyNames()) {
        defaultProperties.setProperty(property, clone.getProperty(property));
    }
    return defaultProperties;
}