Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的闭包将如何使API设计取代语言设计?_Java_Closures_Java 8 - Fatal编程技术网

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

Java中的闭包将如何使API设计取代语言设计?,java,closures,java-8,Java,Closures,Java 8,我可以看到闭包的一些好处,例如它们如何在简化现有库和使将来的设计更简单、更高效方面占有一席之地 然而,提案草案中提到的一个关键点是:(http://www.javac.info/consensus-closures-jsr.html)见第2.5节第e点: (本规范将通过以下方式改进语言) e)使未来的API设计能够取代扩展Java平台的语言设计 我很难理解这是怎么回事,当然语言设计只是语言本身的设计,不能被API取代,除非Java使用闭包打开各种奇怪的API来修改语言(我非常怀疑会发生这种情况)

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

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

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

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

我很难理解这是怎么回事,当然语言设计只是语言本身的设计,不能被API取代,除非Java使用闭包打开各种奇怪的API来修改语言(我非常怀疑会发生这种情况)


有谁能解释一下这一点,或者提供一个例子,说明以前需要更改语言,但由于添加了闭包,不再需要更改语言?

对于没有阅读提案草案的人,下面是同一文档后面部分的更多细节:

闭包的添加简化了Java平台的发展。Sun的公共bug数据库中的许多现有语言RFE可以重新定位为接收闭包的方法的API请求。相反,可以通过添加库方法来满足未来对附加语句表单的许多需求


API设计和语言特性在某些方面是可以互换的。看看Java中的synchronized关键字。它是一个关键字,但如果语言足够不冗长,那么也可以作为API实现。注释是另一个例子。另一种方法是@Stateless注释,它使类中的所有方法都是事务性的,也可能是语言关键字

闭包尤其使将“代码块”交给方法变得容易,然后方法就可以用它做一些事情

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

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

可能没有语言语法直接支持for-each循环那么干净,但它让每个人都可以轻松体验类似于语言的增强功能。

他还研究了java的一个老闭包方案,其中一个目标是让语法更像Ruby(即,您的
for_each
循环中的样板文件比他们现在讨论的更少)。