Java 8决定采用跟C#一样的Lambda句法
程序员文章站
2022-04-17 23:18:16
...
Java 7 正式版已经发布,甲骨文和Java社区进程组织(JCP)的成员们开始考虑为这种编程语言的下一个版本Java SE 8添加新特性了。
经过对备选方案的筛选,JCP团队决定Java 8 将采用跟C#一样的Lambda句法,一些细节还在仔细考虑,涉及到方法引用的语法问题也还在讨论中。
选择这种语法的理由:
C# 的语法:
使用lambda表达式这种语法的一个例子:
英文原文:http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
经过对备选方案的筛选,JCP团队决定Java 8 将采用跟C#一样的Lambda句法,一些细节还在仔细考虑,涉及到方法引用的语法问题也还在讨论中。
选择这种语法的理由:
- 在主要方面权衡,Lambda都被评价为“相当不错”(尽管和其他语法一样有瑕疵),无论使用“小”的Lambda表达式(通常用作方法参数)或是使用“大”的Lambda表达式(多语句),均表现很突出。
- 尽管进行了广泛探索,但是还没有发现比这更好的替代方案。因此,最好在与Java相似的两种语言(C#和Scala)中,选择好用的语法,而不是创造新语法。
C# 的语法:
lambda = ArgList Arrow Body ArgList = Identifier | "(" Identifier [ "," Identifier ]* ")" | "(" Type Identifier [ "," Type Identifier ]* ")" Body = Expression | "{" [ Statement ";" ]+ "}"
使用lambda表达式这种语法的一个例子:
x => x + 1 (x) => x + 1 (int x) => x + 1 (int x, int y) => x + y (x, y) => x + y (x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); } () => { System.out.println("I am a Runnable"); }
英文原文:http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
下一篇: 转发和重定向