AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:464762
用户头像

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

关注

评论

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

React-hooks+TypeScript最佳实战

xiaofeng

React

React-Hook最佳实践

xiaofeng

React

进销存软件哪个简单好用?

优秀

进销存管理系统 进销存系统

彻底搞懂Vue虚拟Dom和diff算法

yyds2026

Vue

OPPO 引力计划全方位升级,与开发者共建折叠屏上繁荣生态

极客天地

微服务是开发架构对三高场景的妥协吗?

NoGirlfriendDeFoundException

架构 微服务 单体架构 云平台

户外led显示屏如何防火

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

前端培训出来的容易找工作吗

小谷哥

前端培训学习后能做多久?

小谷哥

议程剧透!1个主论坛4场Workshop,龙蜥操作系统峰会盛大来袭 | 2022 云栖大会

OpenAnolis小助手

开源 报名 云栖大会 论坛 龙蜥操作系统峰会

过等保流程简单说明-行云管家

行云管家

网络安全 等级保护 过等保 等保2.0

Apache Doris 1.1.3 版本正式发布!|版本通告

SelectDB

数据库 大数据 开源 数据分析 Doris

2022-10微软漏洞通告

火绒安全

安全漏洞

如何实现一个 Go 语言的字符串切片反转函数

宇宙之一粟

数据结构与算法 Go 语言 反转字符串 10月月更

Vue 中为什么要有nextTick

华为云开发者联盟

Vue 前端 DOM 华为云 企业号十月 PK 榜

vue实战中的一些小技巧

yyds2026

Vue

华为云GaussDB数据库荣获国际CC EAL4+级别认证

华为云开发者联盟

数据库 华为云 企业号十月 PK 榜

java的IO模型分类和特点

zarmnosaj

10月月更

git branch --set-upstream-to=origin/master

源字节1号

软件开发

Redis 底层数据结构说明

water

Vue组件入门(七)v-model与自定义事件

Augus

Vue3 10月月更

vue实战-完全掌握Vue自定义指令

yyds2026

Vue

2022前端培训学习前景怎么样?

小谷哥

几个你必须知道的React错误实践

xiaofeng

React

使用ESLint+Prettier统一Vue3项目代码风格

汪小成

10月月更

区块链链游项目系统开发程序方案(Demo)

I8O28578624

一文读懂TDengine3.0中的事务机制

TDengine

数据库 tdengine 时序数据库

前端培训学习就业前景怎么样?

小谷哥

云管平台常见问题汇总解答-行云管家

行云管家

云计算 企业上云 云管理

实践GoF的设计模式:代理模式

华为云开发者联盟

Go 开发 华为云 企业号十月 PK 榜

数仓性能调优:如何进行函数下推

华为云开发者联盟

数据库 后端 华为云 函数 企业号十月 PK 榜

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