最近几年,关于 Java 的热门话题之一就是为 Java 语言添加完整的闭包支持。但是由于闭包可能引入的复杂性,在没有试验过不同提议原型实现的情况下,是很难评估闭包的全部影响的。
现在,加入 Neal Gafter 的 BGGA 提议的原型后,Mark Mahieu 已经开始合并由 Bob Lee、Doug Lea、和 Josh Bloch 合写的 CICE/ARM 提议的原型实现。简易实例创建表达式(CICE)只提供了一个更紧凑的语法,通过一个抽象方法来实例化某个内部类的实例,比如Runnable、Callable 或者Comparator 等。自动资源管理(ARM)块支持闭包的一个主要用例:在一个块内使用资源的作用域,比如当你退出这个块的语句范围时,你会自动调用资源的close 方法。
Mahieu 的最初实现只限于作用域。而对于 CICE,单是表达式就实现了公有局部变量(public locla variables)和隐式 final 局部变量;但没有实现公有局部(public locals)和类型推论。ARM 块实现只支持 ARM 块的 do(){}格式,并且依赖 java.io.Closeable 作为一个初始点。正如 Mahieu 所提示到的和 ARM 规范文档的本身所述,由于存在许多类型——比如 java.sql.Connection、Statement 和 ResultSet 等原因,使用 Closeable 是存在问题的,它们会抛出其他的未受查异常,所以不能用来实现。
这个原型已经帮助生成了提议中的一些细节,它是 ARM 实现的一个更新的 build ,它改变了 do(){}格式的缺省语义来处理受查异常。
随着 Stephen Colebourne 对于 FCM 原型工作的展开,我们将会在明年看到这些提议的哪些方面能起作用,而哪些不能起作用。
评论