【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
文章目录
- 一、闭包定义
- 二、闭包类型
- 三、查看编译后的字节码文件中的闭包类型变量
一、闭包定义
闭包 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 ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )相关推荐
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本编译 | Groovy 脚本字节码文件分析 )
文章目录 一.Groovy 脚本编译 二.Groovy 脚本字节码文件分析 一.Groovy 脚本编译 Groovy 脚本编译后的字节码文件是一个继承 Script 的类 ; 编译下面的 Script ...
- 【Groovy】编译时元编程 ( 编译 ASTTransformation | 打包 ASTTransformation 字节码文件 | 编译 Groovy 类同进行编译时处理 )
文章目录 一.编译 ASTTransformation 二.打包 ASTTransformation 字节码文件 三.编译 Groovy 类同进行编译时处理 一.编译 ASTTransformatio ...
- 反编译工具的使用和字节码文件的查看(Binary Viewer)
反编译工具的使用和字节码文件的查看 什么是反编译 反编译工具 链接: https://pan.baidu.com/s/15r-Qg5_wOhzO8fKRso3x8A 提取码: lmm7 –来自百度网盘 ...
- java的字节码无法显示_【java】查看Java字节码文件内容的方法+使用javap找不到类 解决方法...
研究synchronized底层实现,涉及到查看java字节码的需要 前提是,你的PC已经成功安装了JDK并别配置了环境变量. ==========查看方法========= 一.javap查看简约字 ...
- IAR软件中直接查看编译后代码大小
在使用IAR软件编译代码时,编译后往往看不到编译后代码的大小情况.在调试程序的时候还是比较麻烦的.下面就总结两种最简单的方法在IAR编译器中查看代码大小. 通过输出的编译信息查看 IAR默认的 ...
- 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
文章目录 总结 一.闭包类 Closure 简介 二.闭包类 Closure 中 this.owner.delegate 成员 源码分析 三.分析编译后的字节码文件内容 总结 在闭包中 , 打印 th ...
- 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )
文章目录 总结 一.静态闭包变量 1.执行普通闭包变量 2.执行静态闭包变量 二. 在闭包中定义闭包 三. 完整代码示例 总结 在闭包中 , 打印 this , owner , delegate , ...
- Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记
Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...
- javascript中的闭包closure详解
文章目录 简介 函数中的函数 Closure闭包 使用闭包实现private方法 闭包的Scope Chain 闭包常见的问题 闭包性能的问题 总结 简介 闭包closure是javascript中一 ...
最新文章
- JVM XMX设置多大比较好,Docke容器里该怎么设置JVM呢@无界编程
- Java String类方法
- 使用Sentinel配置Redis 3.x主从高可用服务
- windows下git命令的使用
- 关于 Qt 5,你所需要了解的基础知识
- 牛客 - 膜法记录(状压dp预处理)
- 如何修复XML内存“泄漏”
- 我心中的核心组件~HttpHandler和HttpModule实现图像的缩放与Url的重写
- 08-Scrum过程-办公环境 每日立会(Standup Meeting)
- 我的世界服务器怎么修复锁链甲,我的世界手机版锁链甲怎么做 怎么获得
- @property 各个属性作用【使用时最需注意strong/weak类型】【补充部分内存知识】...
- java提高篇之理解java的三大特性——继承
- vue 根据接口数据筛选_如何根据行值变化筛选数据
- SQL Server数据库复制
- OpenCV3.1.0安装在ubuntu16.40(Linux)步骤(电赛AM5708板子可用)
- win2008R2 不能访问局域网共享\局域网共享中无本机,解决办法
- 最简单的生成ios证书的方法
- sdlc 瀑布式 生命周期_SDLC指南–软件开发生命周期的阶段和方法
- QQ秀已然式微,而同时迭代的厘米秀正在雄起。
- for.in for..of..