closures, inner class and 函数指针

2017/02/12 iteye

一直不是很理解这三个感念之间的区别。Java是面向对象的编程语言,这点与现在流行的面向函数的动态编程语言不同。Javascript就是后者的一个例子。函数可以独立于对象存在,(或者说它本身就是一种对象)。   Java里没有函数指针,但可以向函数中传入一个匿名内部类模拟这种行为。  

Java目前还未引入closures, 但基于JVM的Groovy已经有Closures概念。在Groovy中,所谓Closures就是一段大括号括起来的代码段。这段代码按照Java的习惯一般只能存在于函数中(初始化代码除外)并以函数名的方式调用。在Groovy中,这段代码可以赋给一个变量,通过这个变量来调用这段代码(很多时候放在大括号中直接匿名使用)。   那么代码段与Closures的区别是什么呢?

代码段一般是虚拟机碰到这段代码时就执行(方法调用,初始化,回调方法)。Closures只有在它的call()方法被调用时才执行。理解的不是很清楚,详细请参考:Closures Informal Guide  

闭包有几个特点:

  1. 可以访问闭包范围外的变量(这点是不是跟Java中内部类相似?)
  2. 可以匿名用在任何允许用闭包的地方,比如Groovy的list的collect, each 调用中

Search

    Table of Contents