Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > Java7要支持closure了?
【标  题】:Java7要支持closure了?
【关键字】:Java7,closure
【来  源】:http://blog.csdn.net/g9yuayon/archive/2006/08/20/1098359.aspx

Java7要支持closure了?

Your Ad Here  

当然,不是代数里那个针对操作的closure,而是函数编程里的closure。这里 是提议的PDF。从PDF来看,Java准备支持通行的lexical scoped closure。也就是说,一个函数对象读取的自由变量必须由源代码的结构决定。看例子吧:

public static void main(String[] args){
    
int plus2(int x){ return x+2;}
    
int(int) plus2b = plus2;
    System.out.println(plus2b(
2));
}

这段 int plus2(int x){return x+2;} 就定义了一个叫plus2的函数。它接受一个整数参数,返回一个整数。下一句int(int) plus2b = plus2; 申明了一个函数变量(引用类型),plus2b,然后把它指向plus2指代的函数。int(int)是函数变量的类型,标识带一个整数参数,返回一个整数参数。

对应的closure写法:

int(int) plus2b = (int x) {return x+2; };

或者这样:

int(int) plus2b = (int x): x+2

其实Java应该开始支持类型推断了(Type inference)。函数plus2已经有了类型信息,上面的句子完全可以完全

可以写成plus2b = plus2。大不了像C#3.0里那样,写成var plus2b = plus2,以便编译器有点明显的提示。

有老大会说,不过是句法糖。aynonymous class已经支持lexical scoped closure了。嗯,对也不对。Anonymous class是可以读取lexical scope内的自由变量,但这些变量必需是final。但新的Java closure确可以读取任何本地变量,包括函数参数(不然大家喜闻乐见的Curry怎么玩儿呢? )。一个字:酷!

当然,事情永远没有那么简单。这份提议还讨论了好些其它关键问题。比如说怎么和旧的代码兼容,怎么和anonymous class区分,怎么做类型转换,以及怎么支持泛型。有兴趣的去读PDF吧。

Java7里有了closure当然是好消息。至少我们不用听人唠叨Java是名词的王国了。 Sun前两天说Java要支持更多的语言(包括VB.NET。怎么听起来像说.NET啊),更多的动态语言特性,看来不假。可惜要用到Java7得好几年以后去了。至少我所在的公司还在用1.4。当然了,用哪个版本取决于很多因素,语言本身的影响很小。不过这是另外的话题了。Sun的动作该加快乐。虽说.NET有后发优势,但这个世界就这么残酷:我们只看结果,不听理由。看看C#3.0里的新特性吧:扩展方法,lambda 表达(这个和Java里的closure是一样的), 新的initializier(难道你不喜欢s = [1,2, 3, 4]这样简洁的语法?), 匿名类型, LINQ。。。在改进语言方面,不得不说微软的动作很快。

 

张孝祥Java学习笔记(一):【上一篇】
RCP应用程序开发之四——应用程序窗体生成过程1:【下一篇】
【相关文章】
  • 继续讨论Java里的closure
  • Closures for Java
  • phpBB 2.0.20 Full Path Disclosure and SQL Errors
  • Javascript Closures
  • Groovy指南--(2) 闭包Closure(非正式)
  • Groovy MOP实现mini-language 如传说中Java7.0的XML嵌入式语法
  • CollectionClosureMethod in .Net
  • Visual Basic 9.0 前沿播报·静态篇(四)嵌套函数和Closure
  • 【随机文章】
  • java得线程研究
  • .net中内存占用的问题
  • 在Oracle里使用RAID
  • Porting KAFFE on XScale PXA250
  • 补充:用Ms SQL Server 存储过程操作DBF文件
  • Microsoft ASP.NET 快速入门教程的大纲介绍(一个值得推荐的.net网站也可以说是.net资料库)
  • 优化J2ME中的paint函数
  • DirectX 开发环境的支持与配置
  • 转贴 [翻译]Ajax 陷阱(Ajax Gotchas)
  • Ulead SmartSaver Pro 3.0秘籍点点通(十五)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.