闭包(Closure)类似于 Java 语言中的匿名内部类。闭包和匿名内部类都是可执行的一段代码,不过这两者之间有一些细微的不同。状态是自动传入传出闭包的。闭包可以有名字。它们可以重复使用。而且,最重要且对 Groovy 同样成立的是,闭包远比匿名内部类要灵活得多!闭包用以下方法定义:
- {[comma-separated-Arguments-list ->] statements }
闭包用“{}”括起,“->”前面是参数,后面是处理语句。
闭包至少会有一个参数 “it”,它其实是参数表中的第一个参数,所以如果闭包定义中只有一个参数,可以省略不写,而使用缺省的参数“it”。对于没有参数定义的闭包,“it”的值就是 null 。
闭包通过 call() 方法被调用。在底层,call() 方法实现了对闭包隐含的doCall()方法的调用。
几个简单的例子:
- closure = { name ->
- println("hello ${name}")
- }closure.call("world!")
- closure = { greeting, name ->
- println(greeting + name)
- }closure("hello ", "world!")