Java中的闭包将如何影响Java社区?


11

它是为Java计划的最受关注的功能之一:闭包。我们许多人一直向往他们。我们中的某些人(包括我在内)变得有点急躁,并转向脚本语言来填补空白。

但是,一旦闭包最终到达Java:它们将如何影响Java社区?以VM为目标的脚本语言的发展是否会减慢爬行速度,保持不变或兼容?人们是否会蜂拥至新的闭包语法,从而将Java代码基础全面转换为功能更结构化的实现?我们会不会只看到Java中散布着闭包?对工具/ IDE支持的影响是什么?性能如何?最后,与其他越来越流行的语言相比,对于Java继续采用这种语言意味着什么?

为了提供最新提议的Java Closure语法规范之一的示例:

public interface StringOperation {
   String invoke(String s);
}

// ...

(new StringOperation() {
   public invoke(String s) {
       new StringBuilder(s).reverse().toString();    
   }
}).invoke("abcd");    

会成为 ...

String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");

[来源:http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


您发布的示例来自很多年前-您确定它代表了当前的建议吗?
Daniel Earwicker 2011年

可能不是:随时修改我的示例

3
最近,我或多或少停止使用Java。我仍然期待关闭。
安托

@Daniel-这不是当前的提议,这里似乎有一个最新的提议(并且非常不同):baptiste-wicht.com/2010/05/…–
Nicole

像C#lambda表达式吗?
路易·里斯

Answers:


4

我认为,如果许多“普通” Java开发人员还不熟悉此概念,则需要花费一些时间,但他们逐渐将其简化为常规Java使用,对我们所有人都有利。如果与Java 5到来时的泛型一样快地被接受,那将是很棒的。

我想它不会对以VM为目标的脚本语言产生太大的影响,因为这只是使用具有该语言的语言的优点之一。


3

任何闪亮的新工具都会有一个通常的循环:

  • 大众兴奋,大量新用户滥用它。这是正常且健康的,因为它有助于我们了解新工具的局限性以及如何使用它。
  • 更多内向的人会抱怨说并把早期采用者视为愚蠢的人
  • 最终,这种兴奋感消失了,早期采用者以健康的方式安心使用新工具
  • 更多保留的人将开始羡慕使用新工具的人的生产力,并开始采用现在的健康模式来采用它。

这全部需要花费几年时间才能完成。注释和泛型都是如此,闭包也是如此。

对脚本语言人员的影响:

  • 对于支持闭包的语言,这将帮助脚本语言编写者更有效地完成工作。由于他们已经知道如何使用闭包,因此他们不必做疯狂的事情。
  • 对于不支持闭包的语言,这将在很大程度上被忽略。

1

那些喜欢多线程编程的人将能够在Java中嵌入不变的数据结构,并以更类似lisp的方式处理它们,而无需由于Java和Lisp之间的语言阻抗不匹配而诉诸于非句柄。

那些不使用(或理解)以上任何内容的人将能够像以前一样做事。


1
这是没有道理的。闭包与线程或可变性无关。
davidk01 2012年

他们是这样。正确的闭合要求具有不变性才能在没有大脑爆炸的情况下工作。
permeakra 2012年

不,他们没有。闭包是一段知道其创建环境的代码。就是这样。
davidk01 2012年

1
@ davidk01的定义还可以,但是当闭包链接到可变变量时,其结果随变量的变化而变化。通常,这不是人们想要的,但是如果编译器不反对,则几乎无法检测到该错误。
permeakra 2012年

1
@ davidk01不,我不知道。我的观点是,如果闭包/ lambda与捕获的变量的不变性相关联,则它们可以很好地工作。否则,您会受到Tzeentch的怜悯,只有敬虔的信徒才能有机会。
permeakra '10 -10-1

1

我怀疑熟悉闭包的人会开始在应用程序代码中使用它们。他们会在一段时间内避免在库中使用它们,以保持与旧版Java的向后兼容性。

不熟悉其他语言的闭包的程序员在Java中采用它们的速度会很慢。

泛型在引入Java时很快就被采用,部分原因是升级时出现的所有警告以及它们已集成到SDK中。对于闭包,情况并非如此。很难找到它们存在的证据,因此只有那些想要使用它们的人才会使用它们。

我认为其他JVM脚本语言的开发不会停止。这些语言除了闭包外还具有发展势头和许多功能。但是,我们可能会看到较少的新JVM语言,因为闭包是创建新JVM语言的主要动力。


您应该看看mseifed.blogspot.se/2012/09/… 我认为它非常棒!
mmm 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.