给定一段代码:
class Foo {
@Delegate Map data
Foo(data) { this.data = data }
def getBar() { "Bar" }
}
new Foo([:]).bar // null
new Foo([:]).getBar() // "Bar"
似乎委托(delegate)正在拦截对
.bar
的调用在它变成对 getter 的调用之前。有没有办法解决?我想要一个 map 的委托(delegate),但仍然可以使用清洁器.bar
在调用站点引用该属性。
最佳答案
你在这里得到的比你实际想要的要多( map 上的属性处理——至少这是我的猜测)。直到有人找到解决此问题的方法(excludes
上的 @Delegate
对我不起作用),您最好只使用 expando:
@groovy.transform.InheritConstructors
class Foo extends Expando {
def getBar() { "Bar" }
}
def f = new Foo(baz:'baz')
assert f.foo==null
assert f.bar=="Bar"
assert f.getBar()=="Bar"
f.foo="F00"
assert f.foo=="F00"
assert f.baz=="baz"
关于groovy - 访问 groovy getter 而不是推迟到 @Delegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896805/