java - 如何合并两个 java.util.Properties 对象?

标签 java properties

我试图在我的类中有一个默认的 java.util.Properties 对象,它接受的默认属性,并让开发人员通过指定另一个 java 覆盖其中的一些.util.Properties 对象,但我找不到这样做的好方法。

预期用途如下:

Properties defaultProperties = new Properties();
defaultProperties.put("key1", "value1");
defaultProperties.put("key2", "value2");

Properties otherProperties = new Properties();
otherProperties.put("key2", "value3");

Properties finalProperties = new Properties(defaultProperties);

//
// I'd expect to have something like:
// 
// finalProperties.merge(otherProperties);
//

最佳答案

java.util.Properties 实现了 java.util.Map 接口(interface),因此您可以将其视为这样,并使用像 putAll 这样的方法来添加另一个 Map 的内容。

但是,如果您将其视为 map ,则需要非常小心:

new Properties(defaultProperties);

这通常会引起人们的注意,因为它看起来像一个复制构造函数,但事实并非如此。如果你使用那个构造函数,然后调用类似 keySet() 的东西(继承自它的 Hashtable 父类(super class)),你会得到一个空集,因为 Map Properties 方法不考虑您传递给构造函数的默认 Properties 对象。仅当您使用 Properties 本身中定义的方法(例如 getPropertypropertyNames 等)时,才会识别默认值。

所以如果需要合并两个 Properties 对象,这样做比较安全:

Properties merged = new Properties();
merged.putAll(properties1);
merged.putAll(properties2);

这将为您提供更可预测的结果,而不是随意将其中一个标记为“默认”属性集。

通常,我建议不要将 Properties 视为 Map,因为(在我看来)这是 Java 早期的一个实现错误(属性应该有包含一个 Hashtable,而不是对其进行扩展 - 那是惰性设计),但在 Properties 中定义的贫血接口(interface)本身并没有给我们很多选择。

关于java - 如何合并两个 java.util.Properties 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004833/

相关文章:

java - 为什么我的第一个应用程序没有出现在我的手机上?

java - 哪种加密算法可用于加密存储在磁盘上的文件?

java - JDK 7u79 中 javax.smartcardio.Card.disconnect(boolean reset) 的行为?

c# - 为什么列表的副本仍然使用 C# 更改原始列表中的属性

java - 如何在servlet中使用属性键值

java - JWT 应该是一个单独的身份验证微服务,而不是与后端业务逻辑一起使用吗?

java - 使用 JAX-WS 提取整个 SOAP 消息

Java 属性文件未加载

objective-c - iPhone SDK合成BOOL数组

excel - 无法在 Excel 中更改 VBA 表单的 ListBox 属性