首页 > 解决方案 > 如何从 java.util.Properties 获取默认值

问题描述

一个Properties对象包含一个键值对的映射以及一个受保护Properties的“默认”字段。

可以通过遍历键keySet()来获取 current 的属性键Properties,也可以通过stringPropertyNames()来获取所有不同的键,包括 "defaults" 中的键Properties

我想写一个方法,给定一个Properties实例,返回这些“默认值”,包括键和值。

迭代stringPropertyNames()包含的值和跳过值keySet()是不够的,因为“默认值”中的条目可能被当前的条目隐藏Properties。通过反射访问受保护的“默认值”字段将显示警告输出,并且可能在未来的 Java 版本中不起作用。

标签: javaproperties

解决方案


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

推荐阅读