将闭包应用于Groovy中的任意对象

uqdfh47h  于 2022-10-07  发布在  其他
关注(0)|答案(2)|浏览(152)

在Gradle中,您可以将闭包以如下所示的构建器样式传递给对象本身:

  1. // ant is a property. an object.
  2. ant {
  3. // do funky builder stuff
  4. }

如何创建自己的定制代码来将闭包应用于对象?是否有需要重写的方法才能支持此操作?

svdrlsy4

svdrlsy41#

您可以覆盖call运算符。Groovy允许您不用大括号将闭包参数括起来。

  1. class A {
  2. def call(Closure cl) {
  3. print(cl())
  4. }
  5. }
  6. def a = new A();
  7. a {
  8. "hello"
  9. }

打个招呼。

v09wglhw

v09wglhw2#

加上海鸥提到的方式:

使用接受闭包的方法:

  1. class MyClass {
  2. def ant (c) {
  3. c.call()
  4. }
  5. }
  6. def m = new MyClass()
  7. m.ant {
  8. println "hello"
  9. }

另一种是使用方法缺失,这在接受闭包的方法(在本例中为ant)的名称方面提供了更大的灵活性:

  1. class A {
  2. def methodMissing(String name, args) {
  3. if (name == "ant") {
  4. // do somehting with closure
  5. args.first().call()
  6. }
  7. }
  8. }
  9. def a = new A()
  10. a.ant { println "hello"}
展开查看全部

相关问题