gpt4 book ai didi

dynamic - Groovy:使用字符串作为路径设置动态嵌套方法

转载 作者:行者123 更新时间:2023-12-02 16:50:43 24 4
gpt4 key购买 nike

我有一个对象内对象内对象的路径,我想使用 Groovy 的动态功能来设置它。通常您只需执行以下操作即可做到这一点:

class Foo {
String bar
}


Foo foo = new Foo
foo."bar" = 'foobar'

效果很好。但是如果有嵌套对象怎么办?像这样的东西:

class Foo {
Bar bar
}

class Bar {
String setMe
}

现在我想使用动态设置,但是

Foo foo = new Foo()
foo."bar.setMe" = 'This is the string I set into Bar'

返回 MissingFieldException。

有什么提示吗?

更新:感谢 Tim 为我指明了正确的方向,那里的初始代码非常适合检索属性,但我需要使用路径字符串设置值。

这是我从蒂姆建议的页面中得出的结论:

  def getProperty(object, String propertyPath) {
propertyPath.tokenize('.').inject object, {obj, prop ->
obj[prop]
}
}

void setProperty(Object object, String propertyPath, Object value) {
def pathElements = propertyPath.tokenize('.')
Object parent = getProperty(object, pathElements[0..-2].join('.'))
parent[pathElements[-1]] = value
}

最佳答案

以下工作正常。

foo."bar"."setMe" = 'This is the string I set into Bar';

如果不覆盖 getProperty,您可以使用 GString 的“${}”语法获得相同的结果,如下面的代码所示

class Baz {
String something
}

class Bar {

Baz baz

}

class Foo {
Bar bar
}

def foo = new Foo()
foo.bar = new Bar()
foo.bar.baz = new Baz()

def target = foo
def path = ["bar", "baz"]
for (value in path) {
target = target."${value}"
}

target."something" = "someValue"
println foo.bar.baz.something

最终 println 按预期打印“someValue”

关于dynamic - Groovy:使用字符串作为路径设置动态嵌套方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15507135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com