社区编辑申请
注册/登录
Java 8决定采用跟C#一样的Lambda句法 原创
开发 后端
鉴于Java 7 SE(标准版)现已正式发布,甲骨文和Java社区进程组织(JCP)的成员们已开始仔细考虑为这种编程语言的下一个版本Java SE 8添加什么功能特性。前段时间曝光将为Java 8提上议程的工作是:设计面向云计算的Java。近日又有提出了对Java 8语法上的改变:Java 8 将采用跟C#一样的Lambda句法。

鉴于Java 7 SE(标准版)现已正式发布,甲骨文和Java社区进程组织(JCP)的成员们已开始仔细考虑为这种编程语言的下一个版本Java SE 8添加什么功能特性。前段时间曝光将为Java 8提上议程的工作是:设计面向云计算的Java。近日又有提出了对Java 8语法上的改变:Java 8 将采用跟C#一样的Lambda句法。

lambda-dev在邮件列表宣布,Java的Lambda语法决定基于C#语法。这种语法在C#语言里已经使用很长时间了(C#在1.0时期便引入了委托类型,并在2.0里支持匿名函数,3.0对Lambda表达式提供支持)。

这种语法同时支持表达式和代码块。表示式的形式不需要大括号,并且在执行后返回结果。语法块的形式需要使用大括号,除非使用了return关键字,否则不会直接返回结果。邮件里也给出了示例:

C#的语法是:

  1. lambda = ArgList Arrow Body  
  2.    ArgList = Identifier  
  3.              | "(" Identifier [ "," Identifier ]* ")" 
  4.              | "(" Type Identifier [ "," Type Identifier ]* ")" 
  5.    Body = Expression  
  6.              | "{" [ Statement ";" ]+ "}" 

这里是使用lambda表达式这种语法的一些例子:

  1. x => x + 1  
  2.    (x) => x + 1  
  3.    (int x) => x + 1  
  4.    (int x, int y) => x + y  
  5.    (x, y) => x + y  
  6.    (x, y) => { System.out.printf("%d + %d = %d%n", x, y, x+y); }  
  7.    () => { System.out.println("I am a Runnable"); } 

Lambda表达式的关键优势,在于它们会对参数进行类型推断。不过在某些情况下,编译器依然无法推断出正确类型(尤其是出现操作符重载的时候,例如:(x, y) => x + y 在Java编译器不知道x和y是int还是double时候)。一般来说,类型推断引擎都能自动得出正确的代码,如果需要更多提示,程序员也始终可以显示地增加类型信息。

不久的将来会发布支持新语法的编译器以供体验。

参考原文:http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html

【编辑推荐】

  1. Java 8整装待发 图谋云计算
  2. Java 7是蜜糖还是毒药?
  3. JRuby和Java 7 我们可以期待什么
  4. 别用Java 7?你是在开玩笑吗?
  5. 漫谈Java 7的新特性与C# 2.0的相似之处
责任编辑:陈贻新 来源: 51CTO
相关推荐

2022-02-12 12:26:45

2022-05-07 10:09:01

开发Java日志

2022-05-10 16:04:40

编程语言PythonC语言

2022-03-31 07:52:01

Java多线程并发

2022-04-08 08:26:03

JavaHTTP请求

2022-04-20 10:56:06

JavaJVM参数

2022-05-09 11:52:38

Java卡片服务卡片

2022-04-28 15:38:42

WebViewJavaUI

2022-04-13 08:00:00

Hilla开发Java

2022-04-25 11:26:16

开发SpringBoot

2022-04-19 11:09:13

Wi-Fi IoT智能小车鸿蒙

2022-04-17 23:09:07

深度学习人工智能芯片

2022-04-07 10:39:21

反射Java安全

2022-04-20 07:48:09

微服务链路服务器

2022-04-04 10:28:49

C#项目WPF

2022-04-14 13:48:33

MySQL数据库并发量

2022-04-12 11:20:11

C 语言Linux编程

2022-04-13 18:12:37

TypeScriptPython开发

2022-04-11 07:50:58

2022-04-03 19:51:38

linux服务性能

同话题下的热门内容

Python 字符串总结,建议收藏!这份Java日志格式规范,拿走不谢!Mybatis-Plus官方发布分库分表神器,一个依赖轻松搞定!后端思维篇:如何应用设计模式优化代码改变 Python 对象规则的黑魔法 Metaclass几种限流算法的Go语言实现JMeter关联之正则表达式提取器在 Go 中实现一个支持并发的 TCP 服务端

编辑推荐

使用Kotlin做开发一个月后的感想面试官问你什么是消息队列?把这篇甩给他!五大自动化测试的Python框架图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)2018年最流行的十大编程语言,其中包括你用的语言吗?
我收藏的内容
点赞
收藏

51CTO技术栈公众号