如何使用 CombinedConfiguration 覆盖默认配置?

How do you use a CombinedConfiguration to override a default configuration?

将配置添加到 CombinedConfiguration(来自 Apache Commons 配置 2)时,如何指定一个配置覆盖另一个配置?

例如,假设我有一个默认配置和一个用户配置。如果我希望用户覆盖默认值,我该如何设置组合配置?

XMLConfiguration defaultConfig = ...;
XMLConfiguration userConfig = ...;

CombinedConfiguration config = new CombinedConfiguration();
config.addConfiguration(defaultConfig);
config.addConfiguration(userConfig);

这取决于NodeCombiner传递给CombinedConfigurationclass的构造函数。例如,如果使用 OverrideCombiner 添加到配置的第一个项目将优先于其他节点。如果调用 CombinedConfiguration 的默认构造函数,将使用 UnionCombiner

OverrideCombiner Docs

MergeCombiner Docs

UnionCombiner Docs

解决方案是使用OverrideCombiner,并且需要从高到低的优先级添加配置。

CombinedConfiguration config = new CombinedConfiguration(new OverrideCombiner());
config.addConfiguration(userConfig);
config.addConfiguration(defaultConfig);