0

所以我正在尝试编写一个函数,该函数本质上将遍历字符串列表(配置键)并将关联的值(来自表单)放入ConfigurationHolder.config对象中。这是为了允许管理员用户通过表单修改配置值。

我宁愿不必像这样硬编码所有属性:

config.my.first.property="foo"
config.my.second.property="bar"
config.etc="baz"

我一直在尝试做的事情是:

String key = "my.first.property"
Object value = FOO
config.putAt(key, value)

但是当我稍后使用时请求该值

config.my.first.property

该值未设置为更新后的值。

有什么方法可以做我所描述的,或者我必须对每个属性进行硬编码吗?

4

1 回答 1

2

您必须拆分“ .”上的键并自己深入了解各个级别。幸运的是,通过明智地使用 Groovy 的数组切片和方法,这非常容易inject——这适用于任何键(除了空字符串或包含两个连续点的键等异常情况):

String key = "my.first.property"
Object value = FOO

// split the key into its components
def keyParts = key.split(/\./)
// do config.my.first (i.e. up to the last-but-one component) and then set
// "property" (the last component) on the resulting ConfigObject
keyParts[0..<(keyParts.size() - 1)].inject(config) {
  conf, k -> conf."${k}"
}."${keyParts[-1]}" = value
于 2012-10-10T17:22:22.667 回答