写点什么

Java 决定使用 C#及 Scala 的 Lambda 语法

  • 2011-09-10
  • 本文字数:853 字

    阅读完需:约 3 分钟

Java 8 里最重要的更新之一便是引入了 Lambda 语法,这样可以将匿名函数作为参数或变量。然而,这方面的语法始终未能确定下来,也曾经有过投票,咨询社区更适应哪种语法。

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

从调查结果来看,其他一些语法选择(例如 BGGA )相对别的设计并没有表现出明显的优势。而在 C#和 Scala 中已经长时间使用的语法体验,意味着会有大量程序员已经熟悉此类语法了(C#和 Scala 的主要区别,在于匿名函数的参数如何标识其类型:C#使用“int foo”,而 Scala 使用“foo: int”——人们很容易适应这种细微区别。Java 会使用 C#的形式“int foo”,因为这已经是 Java 语言的表示方法了)。

我们进行了很广泛的探索,但是最终发现没有哪种选择是明显的赢家(每种形式都有好的方面和不那么好的方面,也没有哪种形式明显好过其他的)。因此,与重新发明一种新的语法相比,我们认为还是选择一种在两种和 Java 比较相似的语言里——C#和 Scala——已经得到证明的语法比较合适。

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

复制代码
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"); }

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

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

2011-09-10 05:464978
用户头像

发布了 157 篇内容, 共 62.9 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

BSN开放联盟链“武汉链”新版浏览器wuscan.io正式上线发布

BSN研习社

BSN 武汉链

HDC2022的无障碍参会体验,手语服务是如何做到的?

HarmonyOS SDK

HMS Core

python常用内置函数用法精要(二)

乔乔

11月月更

看透react源码之感受react的进化

goClient1992

React

横向对比主流BI软件优势,企业要按需选择

巷子

从 Uber 数据泄露事件我们可以学到什么?

SEAL安全

数据安全 企业安全 PAM

从recat源码角度看setState流程

flyzz177

React

从react源码看hooks的原理

flyzz177

React

C++中的代码重用

Maybe_fl

链上挖矿分红智能合约DAPP系统开发部署模式定制

开发微hkkf5566

【11.18-11.25】写作社区优秀技术博文回顾

InfoQ写作社区官方

热门活动

深度分析React源码中的合成事件

goClient1992

React

转化10亿GMV:螺丝钉也能变小马达

博文视点Broadview

信创产业多点开花,AntDB数据库积极参与行业标准研制,协同价值链伙伴共促新发展

亚信AntDB数据库

AntDB aisware antdb AntDB数据库

Fiori Elements 框架里 Smart Table 控件的工作原理介绍

汪子熙

SAP Fiori SAP UI5 ui5 11月月更

BSN-DDC基础网络DDC SDK详细设计(六):交易查询、区块查询、签名事件

BSN研习社

BSN

ISV 的亚马逊云科技 marketplace ( 中国区) 之旅

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 Tech 专栏 Marketplace

经营型项目经理是不是伪需求?

PMO实践

项目管理 敏捷 PMO 项目经理

从源码角度看React-Hydrate原理

flyzz177

React

好好的系统,为什么要分库分表?

程序员小富

Java 数据库 面试 分库分表

火山引擎 DataTester 应用故事:一个A/B测试,将产品DAU提升了数十万

字节跳动数据平台

大数据 AB testing实战

云原生系列 【轻松入门容器基础操作】

叶秋学长

云原生 沙箱实验 11月月更

为什么 NGINX 的 reload 不是热加载?

API7.ai 技术团队

Apache nginx 开源 api 网关 APISIX

【从零开始学爬虫】采集猫眼电影热门资讯数据

前嗅大数据

爬虫 数据采集 爬虫软件 爬虫教程 数据采集教程

一个PMO从0-1建设的工作思路 | 对你绝对有用!

PMO实践

项目管理 PMO

只需5步注册成为亚马逊云科技 Marketplace (海外区)专家

亚马逊云科技 (Amazon Web Services)

亚马逊云科技 Tech 专栏 Marketplace

Spring中获取bean的八种方式,你get了几种?

小小怪下士

Java spring bean

华为云区块链三大核心技术国际标准立项通过

华为云开发者联盟

区块链 华为云

【看球和学Go】错误和异常、CGO、fallthrough

王中阳Go

Go golang 面试题 Go web 11月月更

聊一聊装饰者模式

Java 设计模式

瓴羊Quick BI,强劲数据引擎助力企业数据分析

夏日星河

Java决定使用C#及Scala的Lambda语法_Java_Alex Blewitt_InfoQ精选文章