在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

【云原生 | 从零开始学Kubernetes】十三、k8s的容器探测以及启动探测

泡泡

云计算 容器 云原生 k8s 9月月更

互联网进入存量博弈时代,小程序技术创造移动应用新机遇

FinClip

finclip

keep move!滑动窗口中位数与滑动魔方

掘金安东尼

算法 9月月更

透视星环科技上市:基础工具、技术融合、场景应用三维击穿

易观分析

数据

大数据ELK(八):Elasticsearch安装IK分词器插件

Lansonli

ES 9月月更

P5~P9应该具备的核心能力是什么

博文视点Broadview

数据结构第五章图,期末不挂科指南

梦想橡皮擦

9月月更

九月书单

图灵教育

科普 计算机 新书

Java中Interface天天都在写,你知道其背后的原理是什么吗?

wljslmz

Java 接口 9月月更

从URL输入到页面展现到底发生什么?

loveX001

JavaScript

物联网平台常见问题与答案汇总

阿里云AIoT

数据 物联网平台 物联网 协议 mqtt

禅道项目管理软件App使用

禅道项目管理

项目管理 App 禅道

仅需30行代码,轻松集成HMS Core视频编辑服务屏幕录制能力

HarmonyOS SDK

编辑 视频

面试官让你说说react状态管理?

beifeng1996

React

vue项目性能优化-前端加分项

bb_xiaxia1998

Vue

数据结构第六章查找,期末不挂科指南

梦想橡皮擦

数据结构 9月月更

VUE 数据分页

HoneyMoose

九月书单

图灵社区

科普 计算机 新书

【web开发基础】PHP快速入门(5)-PHP运算符之算术运算符和字符串运算符详解

迷彩

运算符 php开源 9月月更 web开发基础 算术运算符

Java进阶(三十七)java 自动装箱与拆箱

No Silver Bullet

Java 9月月更 自动装箱 拆箱

VolareFinance 测试网教程(更新)

鳄鱼视界

一道React面试题把我整懵了

beifeng1996

React

小程序化:系统集成行业降本增效的破局思考

FinClip

sentinel-dashboard-apollo 1.8.5 发布,支持 apollo 持久化的定制版

铁匠

orbeon form 通过 url 的方式同第三方应用集成的开发明细

汪子熙

Java SAP commerce form 9月月更

【web 开发基础】php 开发基础快速入门 (4)-PHP常量详解

迷彩

php 常量 9月月更 魔术常量

APISIX是怎么跑起来的

geange

lua api 网关 APISIX 网关 APISIX的源码解析

【编程实践】利用Python看看那些QQ好友都在QQ空间发了啥

迷彩

词云图 selenium Python爬虫 9月月更 结巴分词

Java中只有8大数据类型吗?看了本文,你会收获颇丰

wljslmz

Java 数据类型 9月月更

还不了解堆栈和队列吗?数据结构最基础、最重要的概念必须掌握!

wljslmz

数据结构 堆栈 队列 9月月更

2022年中国HR SaaS行业洞察

易观分析

HR SaaS

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