java - 如何从 java.util.Properties 获取默认值
问题描述
一个Properties
对象包含一个键值对的映射以及一个受保护Properties
的“默认”字段。
可以通过遍历键keySet()
来获取 current 的属性键Properties
,也可以通过stringPropertyNames()
来获取所有不同的键,包括 "defaults" 中的键Properties
。
我想写一个方法,给定一个Properties
实例,返回这些“默认值”,包括键和值。
迭代stringPropertyNames()
包含的值和跳过值keySet()
是不够的,因为“默认值”中的条目可能被当前的条目隐藏Properties
。通过反射访问受保护的“默认值”字段将显示警告输出,并且可能在未来的 Java 版本中不起作用。
解决方案
该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;
}
推荐阅读
- php - laravel和flutter之间的加密
- perl - 在 shell 脚本中使用 SSH 命令时出错
- node.js - Firebase - 功能没有正确部署 - 没有这样的文件或目录,打开'/workspace/node_modules/shared/package.json
- nginx - nginx反向代理https到http问题
- javascript - 如何从本地服务器上的共享文件加载图像?
- javascript - 需要算法帮助
- c# - 为什么 C# System.IO.Abstractions 库正在写入磁盘?
- python - 在多列上加入两个熊猫数据框(联合)而不重复
- ios - AVAudioSession 通知线程崩溃
- javascript - 调用 submit() 事件时防止页面刷新和重新加载