groovy - 访问 groovy getter 而不是推迟到 @Delegate

标签 groovy delegates annotations javabeans abstract-syntax-tree

给定一段代码:

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/

相关文章:

groovy - 通过Java Mail访问Gmail唯一邮件ID

java - "--continue"标志的 Gradle 属性?

java - 注释m :n relationship with helper class (2 foreign keys + additional attributes) with JPA 2. 0

ios - swift : UIPickerViewController delegates not called after Class-Extraction

c# - 无法使扩展方法在委托(delegate)上工作

python 锁方法注解

iphone - AddressAnnotation 可能不会响应 initWithCoordinate

groovy - 如何将 String 转换为 GString 并替换 Groovy 中的占位符?

testing - 字符串中 "\"转义字符的 Groovy/Grails 扩散

ios - 如何在使用 SWRevealViewController 时获取显示并重新加载菜单表的 View