Java中的闭包如何使API设计取代语言设计?

2022-09-04 21:47:27

我可以看到闭包的一些好处,比如它们如何在简化现有库和使一些未来的设计更容易和更高效方面占有一席之地。

然而,提案草案(http://www.javac.info/consensus-closures-jsr.html)中提到的一个关键点是第2.5节e点:

(规范将通过以下方式改进语言)

e)使未来的API设计能够取代语言设计,以扩展Java平台。

我很难看出这是怎么回事,当然语言设计就是这样 - 语言本身的设计,并且不能被API取代,除非Java使用闭包来修改语言(我非常怀疑会发生)。

任何人都可以对此进行一些阐明,也许可以提供一个以前需要语言更改的示例,但是随着闭包的添加,不再需要一个?


答案 1

API设计和语言功能在某些方面绝对是可以互换的。只要看看Java中的同步关键字。它是一个关键字,但如果语言足够不冗长,也可以作为API实现。批注是另一个例子。相反,使类中的所有方法都成为事务性的@Stateless注释也可能是语言关键字。

特别是闭包使得将“代码块”传递给方法变得容易,然后方法可以对此执行某些操作。

一个粗略的例子,可以为每个做一个:

for_each(myFooList, #(Foo foo) { 
   String something = foo.getBar() + foo.getKaz();
   System.out.println(something);
});

也许不是100%干净,因为for每个循环都由语言的语法直接支持,但它允许每个人轻松体验类似语言的增强功能。


答案 2

对于任何尚未阅读提案草案的人,以下是同一文档后面的更多详细信息:

闭包的添加简化了 Java 平台的演变。Sun 的公共 bug 数据库中的许多现有语言 RFE 可以重新定位为接收闭包的方法的 API 请求。将来对其他语句形式的许多需求可以通过添加库方法来满足。