Groovy 的精髓 —— 闭包

闭包的进化过程 

在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)
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值