WEB开发网
开发学院软件开发Java 浅谈Java 7的闭包与Lambda表达式之优劣 阅读

浅谈Java 7的闭包与Lambda表达式之优劣

 2010-06-15 00:00:00 来源:WEB开发网   
核心提示:前几天Oracle推出了Java 7官方的闭包与Lambda表达式的第一个实现,这基本上也是最终在正式版中的样式了,浅谈Java 7的闭包与Lambda表达式之优劣,看了这个实现之后,我的第一感觉便是“丑”,而大括号内部可以包含多条语句,就像一个普通的方法体一样,当然不排除这是因为看惯了其他语言

前几天Oracle推出了Java 7官方的闭包与Lambda表达式的第一个实现,这基本上也是最终在正式版中的样式了。看了这个实现之后,我的第一感觉便是“丑”,当然不排除这是因为看惯了其他语言中实现的缘故。后来再仔细看了看又想了想,发现Java 7的实现也并非毫无可取之处,但似乎又感到某些做法上有一些问题。总之整个过程颇为有趣,决定将我的想法记录下来,希望可以吸引人来一起讨论一下。

Java 7中的Lambda表达式

Java 7中的Lambda表达式有两种形式,首先是第一种:

#int() func1 = #()(3); // "func1.()" returns 3 
#int(int) func2 = #(int x)(x + 1); // "func2.(3)" returns 4 
#int(int, int) func3 = #(int x, int y)(x - y); // "func3.(5, 3)" returns 2 

然后是第二种,含义与上面等价:

#int() func1 = #(){ return 3; }; 
#int(int) func2 = #(int x){ return x + 1; }; 
#int(int, int) func3 = #(int x, int y){ return x – y; };

如果Lambda的body是“单个表达式”的话,便可以使用“小括号”,并省去最后的return关键字;如果body中需要包含多条语句的话,则必须使用“大括号”,而大括号内部可以包含多条语句,就像一个普通的方法体一样。这两种写法在C#中也有对应物,如在“单个表达式”的情况下:

// C# 
Func<int> func1 = () => 3; // "func1()" returns 3 
Func<int, int> func2 = x => x + 1; // "func2(3)" returns 4 
Func<int, int, int> func3 = (x, y) => x - y; // "func3(5, 3)" returns 2

1 2 3 4 5 6  下一页

Tags:Java 闭包 Lambda

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接