一、闭包介绍

闭包就是一段代码块,相当于方法

二、闭包基础语法

  1. def clouser={ String name->{
  2. println "Hello groovy!${name}"
  3. return "Hello ${name}"
  4. }}
  5. def result=clouser("groovy")
  6. println result

调用:直接用.call()调用,也可以直接()调用
参数:name便是传递的参数
返回值:直接return返回接口

三、闭包进阶

1、主要参数:this,owner,delegate

  • this:代表闭包定义处的类
  • owner:代表闭包定义出的类或者对象
  • delegate:代表任意对象(默认与owner一致)

场景:

  • 在闭包中,三个值都指向闭包
  • 在类中的闭包,三个值都指向类
  • 在闭包中的闭包,this执行所在的闭包,owner和delegate指向外部的闭包
  • delegate默认与owner,但可以通过更改修改delegate指向的值

四、闭包的委托策略

  1. class Student{
  2. String name
  3. def pretty={"My name is ${name}"}
  4. String toString(){
  5. pretty.call()
  6. }
  7. }
  8. class Teacher{
  9. String name
  10. }
  11. def stu=new Student(name:'Sarash')
  12. def tea=new Teacher(name:"Ondroid")
  13. println stu.toString()
  14. stu.pretty.delegate=tea
  15. stu.pretty.resolveStrategy=Closure.DELEGATE_FIRST
  16. println stu.toString()

image.png
Student默认指向自身的name:Sarash,通过delegate修改指向到tea的name(name字段必须相同,如果tea没有,则只找student中的)