#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;
}