【51CTO快译】虽然关于Java 7闭包一直波澜不断,开发者们也对Java是否真的需要引入闭包存在争议,但Oracle还是在两天前放出了Java 7闭包的第一个版本。我们可以在测试项目中看到Java编译器语法规则的演变。点此查看测试项目。
Oracle发布的最新版本有以下功能更新:
◆函数类型语法
◆函数类型的子类型
◆全面支持Lambda表达式
◆在lambda中对thrown/return类型的引用
在Oracle的更新说明中显示,这里所提到的函数类型在默认情况下不会启动,必须使用XDallowFunctionTypes来启用。以下为示例:
type1,lambda表达式:
- int i1 = #()(3).(); //i1 = 3
- Integer i2 = #()(3).(); //i2 = 3
- int i3 = #(int x)( x + 1 ).(3); //i3 = 4
- int i4 = #(Number x)(x.intValue()).(new Float(3.0f)); //i4 = 3
type2
- int i1 = #(){ return 3; }.(); //i1 = 3
- Integer i2 = #(){ return 3; }.(); //i2 = 3
- int i3 = #(int x){ return x + 1; }.(3); //i3 = 4
- int i4 = #(Number x){ return x.intValue(); }.(new Float(3.0f)); //i4 = 3
关于Java闭包
支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。对于Java是否应该引入闭包特性一直存在争议,详细请参考《百家争鸣 Java需要引入闭包吗?》。去年51CTO曾报道《Java 7决定包含闭包 发布日期推迟至2010年底》的消息,在Devoxx 2009上已基本确定在Java 7中对闭包的引入。
关于Java 7闭包的详细介绍请参考《Java 7的第一类函数:学习闭包的使用》。
【编辑推荐】
原文:Java 7 : Oracle pushes a first version of closures
链接:http://www.baptiste-wicht.com/2010/05/oracle-pushes-a-first-version-of-closures/