闭包的进化过程
在Groovy中可以使用闭包这种特殊的类型,闭包其实声明格式就是一个:{ } 括起来的代码块。
接近java类型的代码
class Example {
static void main(String[] args) {
def clos = {println "Hello World"};
// 最好下载一下源码,从里面可以看到Groovy的闭包其实就是一个groovy.lang.Closure类。
clos.call();
//Closure 类的call()方法即回调方法。
}
}
可以传递参数
class Example {
static void main(String[] args) {
//闭包默认又param入参
def clos = {param->println "Hello ${param}"};
clos.call("World");
}
}
闭包作为变量传递
class Example {
static void main(String[] args) {
def str1 = "Hello"
def clos = {param -> println "${str1} ${param}"}
clos.call("World");
str1 = "Welcome";
clos.call("World");
}
}
class Example {
def static Display(clo) {
// This time the $param parameter gets replaced by the string "Inner"
clo.call("Inner");
}
static void main(String[] args) {
def str1 = "Hello";
def clos = { param -> println "${str1} ${param}" }
clos.call("World");
// We are now changing the value of the String str1 which is referenced in the closure
str1 = "Welcome";
clos.call("World");
// Passing our closure to a method
Example.Display(clos);
}
}
省略call和括号
class Example{
static def isNotNull={
str,Closureclosure->
if(str!=null&&!"".equals(str.trim())){
closure.call()
}
}
static void main(String[]args){
defa="sss";
isNotNull a,{
print(a)
}
}
}