理解Groovy闭包委托

[TODO]

Closure代码

1

thisObject, owner, delegate

Closure有三个属性,分别是 thisObject, owner, delegate。通常delegate被设置为owner。 来源

Idea的Groovy Console中运行代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def testClosure(closure) {
closure()
}
testClosure() {
println "this is " + thisObject + ", super:" + this.getClass().superclass.name
println "owner is " + owner + ", super:" + owner.getClass().superclass.name
println "delegate is " + delegate + ", super:" + delegate.getClass().superclass.name

testClosure() {
println "this is " + thisObject + ", super:" + this.getClass().superclass.name
println "owner is " + owner + ", super:" + owner.getClass().superclass.name
println "delegate is " + delegate + ", super:" + delegate.getClass().superclass.name
}
}

输出如下:

1
2
3
4
5
6
this is ideaGroovyConsole@710636b0, super:groovy.lang.Script
owner is ideaGroovyConsole@710636b0, super:groovy.lang.Script
delegate is ideaGroovyConsole@710636b0, super:groovy.lang.Script
this is ideaGroovyConsole@710636b0, super:groovy.lang.Script
owner is ideaGroovyConsole$_run_closure1@4e5ed836, super:groovy.lang.Closure
delegate is ideaGroovyConsole$_run_closure1@4e5ed836, super:groovy.lang.Closure

resolveStrategy

demo