文章目录

  • 一、闭包定义
  • 二、闭包类型
  • 三、查看编译后的字节码文件中的闭包类型变量

一、闭包定义


闭包 Closure 是 Groovy 中最常用的特性 , 使用闭包作为参数是 Groovy 语言的明显特征 ;

闭包的最基本形态如下 :

// 定义闭包变量
def closure = {}

上述 closure 变量就是一个闭包 ;

闭包可以看做一个 代码块 , 执行该闭包 , 就是执行该代码块内容 ;

二、闭包类型


闭包的类型是 Closure , 可以调用上述 def closure 变量的 getClass 方法 , 查询该闭包的类型 ;

// 打印闭包变量类型
println closure.getClass()

打印的闭包类型是

class Test$_main_closure1

Test$_main_closure1 类型 是 Closure 类型的子类 ;

这是 Test 类 中的 , main 函数 中的 , 第 111 个闭包 , 记做 closure1 ;

三、查看编译后的字节码文件中的闭包类型变量


查看该 Groovy 代码的编译的字节码文件 , 路径为 \build\classes\groovy\main\Test.class

Test.groovy 代码编译后的字节码文件内容为 :

import Test._main_closure1;
import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import org.codehaus.groovy.runtime.callsite.CallSite;public class Test implements GroovyObject {public Test() {CallSite[] var1 = $getCallSiteArray();MetaClass var2 = this.$getStaticMetaClass();this.metaClass = var2;}public static void main(String... args) {CallSite[] var1 = $getCallSiteArray();Object closure = new _main_closure1(Test.class, Test.class);var1[0].callStatic(Test.class, var1[1].call(closure));}static {__$swapInit();Long var0 = 0L;__timeStamp__239_neverHappen1640701694911 = var0;Long var1 = 1640701694911L;__timeStamp = var1;}
}

闭包定义的内容是

Object closure = new _main_closure1(Test.class, Test.class);

对应如下代码的闭包变量 :

def closure = {}

【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )相关推荐

  1. 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )

    文章目录 一.Groovy 脚本编译 二.Groovy 脚本字节码文件分析 一.Groovy 脚本编译 Groovy 脚本编译后的字节码文件是一个继承 Script 的类 ; 编译下面的 Script ...

  2. 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )

    文章目录 一.编译 ASTTransformation 二.打包 ASTTransformation 字节码文件 三.编译 Groovy 类同进行编译时处理 一.编译 ASTTransformatio ...

  3. 反编译工具的使用和字节码文件的查看(Binary Viewer)

    反编译工具的使用和字节码文件的查看 什么是反编译 反编译工具 链接: https://pan.baidu.com/s/15r-Qg5_wOhzO8fKRso3x8A 提取码: lmm7 –来自百度网盘 ...

  4. java的字节码无法显示_【java】查看Java字节码文件内容的方法+使用javap找不到类 解决方法...

    研究synchronized底层实现,涉及到查看java字节码的需要 前提是,你的PC已经成功安装了JDK并别配置了环境变量. ==========查看方法========= 一.javap查看简约字 ...

  5. IAR软件中直接查看编译后代码大小

      在使用IAR软件编译代码时,编译后往往看不到编译后代码的大小情况.在调试程序的时候还是比较麻烦的.下面就总结两种最简单的方法在IAR编译器中查看代码大小. 通过输出的编译信息查看   IAR默认的 ...

  6. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )

    文章目录 总结 一.闭包类 Closure 简介 二.闭包类 Closure 中 this.owner.delegate 成员 源码分析 三.分析编译后的字节码文件内容 总结 在闭包中 , 打印 th ...

  7. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )

    文章目录 总结 一.静态闭包变量 1.执行普通闭包变量 2.执行静态闭包变量 二. 在闭包中定义闭包 三. 完整代码示例 总结 在闭包中 , 打印 this , owner , delegate , ...

  8. Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...

  9. javascript中的闭包closure详解

    文章目录 简介 函数中的函数 Closure闭包 使用闭包实现private方法 闭包的Scope Chain 闭包常见的问题 闭包性能的问题 总结 简介 闭包closure是javascript中一 ...

最新文章

  1. JVM XMX设置多大比较好,Docke容器里该怎么设置JVM呢@无界编程
  2. Java String类方法
  3. 使用Sentinel配置Redis 3.x主从高可用服务
  4. windows下git命令的使用
  5. 关于 Qt 5,你所需要了解的基础知识
  6. 牛客 - 膜法记录(状压dp预处理)
  7. 如何修复XML内存“泄漏”
  8. 我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
  9. 08-Scrum过程-办公环境 每日立会(Standup Meeting)
  10. 我的世界服务器怎么修复锁链甲,我的世界手机版锁链甲怎么做 怎么获得
  11. @property 各个属性作用【使用时最需注意strong/weak类型】【补充部分内存知识】...
  12. java提高篇之理解java的三大特性——继承
  13. vue 根据接口数据筛选_如何根据行值变化筛选数据
  14. SQL Server数据库复制
  15. OpenCV3.1.0安装在ubuntu16.40(Linux)步骤(电赛AM5708板子可用)
  16. win2008R2 不能访问局域网共享\局域网共享中无本机,解决办法
  17. 最简单的生成ios证书的方法
  18. sdlc 瀑布式 生命周期_SDLC指南–软件开发生命周期的阶段和方法
  19. QQ秀已然式微,而同时迭代的厘米秀正在雄起。
  20. for.in for..of..

热门文章

  1. Java魔法堂:枚举类型详解
  2. VC回调函数定义和使用
  3. Bullet 物理引擎 详细分析 Dbvt (4)
  4. NetBeans 时事通讯(刊号 # 20 - Aug 11, 2008)
  5. xml转json和实体类的两种方式
  6. poj1018 Communication System (有道翻译完全拯救不了)
  7. 基于visual Studio2013解决面试题之1002公共子串
  8. SSIS - 5.优先约束
  9. TCP / IP协议 --- 用户层面
  10. ExtJS4.x动态加载js文件