文章目录

  • 一、闭包类 Closure 简介
  • 二、 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法
  • 三、 完整代码示例

一、闭包类 Closure 简介


闭包是 Closure 对象 , Closure 类中有很多成员 , 以及封装的函数 , 下面是 Closure 类的继承结构 ;

/*** 在 Groovy 中代表任何闭包对象 .* <p>* Groovy允许以简短的形式调用闭包实例。例如:* <pre>* def a = 1* def c = { a }* assert c() == 1* </pre>* 为了能够以这种方式在您自己的子类中使用闭包,* 您需要提供一个带有您想要的任何签名的doCall方法。* 这确保了{@link#getMaximumNumberOfParameters()}* 和{@link#getParameterTypes()}在* 没有任何额外代码的情况下也可以工作。* 如果没有提供doCall方法,则必须以长形式使用闭包,如* <pre>* def a = 1* def c = {a}* assert c.call() == 1* </pre>** @author <a href="mailto:james@coredevelopers.net">James Strachan</a>* @author <a href="mailto:tug@wilson.co.uk">John Wilson</a>* @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>* @author Graeme Rocher* @author Paul King*/
public abstract class Closure<V> extends GroovyObjectSupport implements Cloneable, Runnable, GroovyCallable<V>, Serializable {}

二、 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法


在 闭包类 Closure 中 , 有如下 222 个成员 :

    protected Class[] parameterTypes;protected int maximumNumberOfParameters;

Class[] parameterTypes 是参数类型 , int maximumNumberOfParameters 是最大所需参数个数 , 当调用闭包时 , 不知道向闭包中传递什么类型的参数时 , 不知道传入多少个参数时 , 此时可以使用 上述 222 个成员 ;

如下代码 , 定义一个闭包 :

// 定义闭包
// 该闭包接收 2 个参数
def closure = {int a, String b ->
}

如果使用上述 closure 闭包时 , 不知道该闭包接收什么类型的参数 , 和参数个数 , 可以使用 println 打印闭包参数 ;

打印参数类型 : 上述 222 个参数 , 打印出来的结果是 [int, class java.lang.String] ;

// 打印参数类型
println closure.parameterTypes

打印参数个数 :

// 打印参数个数
println closure.maximumNumberOfParameters

三、 完整代码示例


完整代码示例 :

// 定义闭包
// 该闭包接收 2 个参数
def closure = {int a, String b ->
}// 打印参数类型
println closure.parameterTypes// 打印参数个数
println closure.maximumNumberOfParameters

执行结果 :

[int, class java.lang.String]
2

【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )相关推荐

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

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

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

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

  3. 一篇文章汇总Python装饰器全知识图谱(使用场景,基本用法,参数传递,闭包操作,类装饰器和AOP)

    装饰器,是将Python代码变得低耦合,简洁优美的必经之路,同时也是实现闭包操作,AOP编程的基础.这一篇博客从装饰器的产生原因,基本使用,延伸到参数传递,闭包操作,最后到类装饰器和AOP,希望能用我 ...

  4. python闭包和函数调用区别_函数闭包与可调用类

    请注意,由于之前在我的测试代码中发现了一个错误,我原来的答案是不正确的.修订版如下. 我做了一个小程序来测量运行时间和内存消耗.我创建了以下可调用类和一个闭包:class CallMe: def __ ...

  5. php closure invoke,PHP Closure类详解

    PHP Closure 类是用于代表匿名函数的类,匿名函数(在 PHP 5.3 中被引入)会产生这个类型的对象,Closure类摘要如下: Closure { __construct ( void ) ...

  6. Swift-闭包,隐式返回、尾随闭包、值捕获、逃逸闭包、自动闭包

    闭包 闭包可以捕获和存储其所在上下文中任意常量和变量的引用,被称为包裹常量和变量. Swift 会为你管理在捕获过程中涉及到的所有内存操作. 全局和嵌套函数实际上也是特殊的闭包,闭包采用如下三种形式之 ...

  7. js闭包是什么?对js闭包的理解

    结合 MDN 官网中 JavaScript 章节中对闭包详解,我们需要理清的问题有,什么是闭包.闭包产生的条件.以及闭包的用途. 1.1 闭包的概念 闭包(closure)是一个函数以及其捆绑的周边环 ...

  8. 你不懂JS:作用域与闭包 第五章:作用域闭包

    希望我们是带着对作用域工作方式的健全,坚实的理解来到这里的. 我们将我们的注意力转向这个语言中一个重要到不可思议,但是一直难以捉摸的,几乎是神话般的 部分:闭包.如果你至此一直跟随着我们关于词法作用域 ...

  9. 从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则

    闭包是很多语言都具备的特性,上篇<从抽象代数漫游函数式编程(1):闭包概念再Java/PHP/JS中的定义> 闭包的特性 闭包有三个特性: 函数嵌套函数 函数内部可以引用外部的参数和变量 ...

最新文章

  1. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
  2. 【转】做正确的事情,等着被开除(Do the right thing, Wait to get fired)
  3. Mysql Router 读写分离配置
  4. 关于Spring Boot WebSocket整合以及nginx配置详解
  5. 软件测试oracle问题,数据库基础:Oracle数据库中时间问题比较
  6. 用tar备份linux
  7. linux文件属性权限相关
  8. php 请求url没有扩展名,apache – 将.php重定向到无扩展名,并在没有.php的情况下创建url...
  9. Codeforce - 920C- Swap Adjacent Elements 排序|思维
  10. 【CodeForces - 569C】Primes or Palindromes? (思维,分析范围,暴力枚举判断)
  11. MySQL8.0版本和5.7通过Navicat远程连接
  12. linunx 定位最耗资源的进程
  13. 如何在有道云笔记的Markdown上上传本地图片(亲测好用,而且不用开会员)
  14. python如何请求curl_Python爬虫偷懒神器 —— 一键构造请求头!
  15. 罗定职业技术学院计算机考试二级,2018年罗定职业技术学院五年一贯制单独招生术科考试成绩.PDF...
  16. 世界上增福最快的方法!【错过就可惜了】
  17. python去除pdf密码
  18. 微信小程序 百度SDK定位 坐标纠偏
  19. git 下载慢的问题解决
  20. Android 应用中使用ContentObserver自动填写短信验证码

热门文章

  1. Nagios 监控系列学习 —— 简介和安装
  2. 领航的公开课 有空可以看看
  3. ebtables安装和使用
  4. 编程学习初体验(4. 编程的核心)
  5. 后盾网lavarel视频项目---vue实现动态添加和删除板块
  6. 【ubuntu】ubuntu16.04的虚拟机突然打不开terminal了
  7. 【原创】原来你竟然是这样的Chrome?!Firefox笑而不语
  8. 20165301 预备作业三:Linux安装及命令入门
  9. 线性可分 与线性不可分
  10. 如何处理xml文件!看看这里