将未来赌在Java上的Oracle绝对不乎放置Java不管的,而不管处于任何目的,Oracle都会不遗余力的推动Java甚至是JavaEE以及各种规范的发展,从这点来说对于Java爱好者来说是十分有利的。因为不管是谁掌管Java,只要是可以推动Java的发展,都是一件令人愉快的事情。而最近Oracle用行动证明了Java在其心目中的地位,Oracle于不久前发布了基于Java 7的闭包实现的第一个版本,这也是Java在演化过程中首次正事声明了对闭包的支持功能,同时在针对闭包的语法也有所改变,并在Java编译器方面也针对闭包做了调整。
Java 7对闭包的支持主要包括:
- Function types syntax
- Function types subtyping
- Full support for lambda expression of type 1 and 2
- Inference of thrown types/return type in a lambda
- Lambda conversion using rules specified in v0.1.5 draft
- Support references to ‘this’ (both explicit and implicit)
- Translation using method handles
因为闭包特性是首次加入,目前还没有作为默认的Java 7特性出现,想要尝试这些特性的朋友可以在JVM参数中增加 -XDallowFunctionTypes 参数来启动闭包特性
关于闭包的两个例子:
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
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