Groovy:向父对象添加对属性中方法的引用

Groovy:向父对象添加对属性中方法的引用,groovy,Groovy,假设我有一门课是这样的: class Foo { def doFoo() { println "foo" } } class Bar { def doBar() { println "bar" } } class Baz { Foo foo = new Foo() Bar bar = new Bar() } Baz baz = new Baz() baz.doFoo() baz.doBar() 还有一个是这样的: class Foo { def

假设我有一门课是这样的:

class Foo {
  def doFoo() {
    println "foo"
  }
}
class Bar {
  def doBar() {
    println "bar"
  }
}
class Baz {
  Foo foo = new Foo()
  Bar bar = new Bar()
}
Baz baz = new Baz()
baz.doFoo()
baz.doBar()
还有一个是这样的:

class Foo {
  def doFoo() {
    println "foo"
  }
}
class Bar {
  def doBar() {
    println "bar"
  }
}
class Baz {
  Foo foo = new Foo()
  Bar bar = new Bar()
}
Baz baz = new Baz()
baz.doFoo()
baz.doBar()
还有一个是这样的:

class Foo {
  def doFoo() {
    println "foo"
  }
}
class Bar {
  def doBar() {
    println "bar"
  }
}
class Baz {
  Foo foo = new Foo()
  Bar bar = new Bar()
}
Baz baz = new Baz()
baz.doFoo()
baz.doBar()
在这个例子中,需要什么才能像这样使用它:

class Foo {
  def doFoo() {
    println "foo"
  }
}
class Bar {
  def doBar() {
    println "bar"
  }
}
class Baz {
  Foo foo = new Foo()
  Bar bar = new Bar()
}
Baz baz = new Baz()
baz.doFoo()
baz.doBar()
其中,
doFoo
doBar
方法调用只是委托给各自对象中定义的版本?有没有办法通过某种元编程来实现这一点,或者我是否被困在将每个方法单独定义为包装器的过程中?

是您所需要的:

class Foo {
  def doFoo() {
    println "foo"
  }
}

class Bar {
  def doBar() {
    println "bar"
  }
}

class Baz {
  @Delegate
  Foo foo = new Foo()
  @Delegate
  Bar bar = new Bar()
}

Baz baz = new Baz()
baz.doFoo()
baz.doBar()

我自己刚找到这个。仍然在学习Groovy,并且每天都更加热爱它@安迪,是的,这是一种非常好的语言。找到了另一篇关于AST转换和特性的详细文章: