最初设计Java时,忽略匿名函数被认为是适当的。我可以想到两个原因(但可能与官方原因有所不同):
- Java被设计为没有功能的面向对象的语言,因此在没有功能的语言中具有匿名功能并不是很自然。或至少,这会在很大程度上影响语言的设计。
- 匿名功能在Java旨在吸引的程序员社区(C,C ++,Pascal?)中并不流行。即使是现在,许多Java程序员似乎仍然认为这些功能非常陌生(但是Java 8可能会很快改变这种功能)。
正如罗伯特·哈维(Robert Harvey)解释的那样,在接下来的几年中,Sun的策略始终是保持Java向后兼容和非常稳定。
另一方面,出现了其他竞争性语言(最重要的是C#,它是Java克隆而诞生的,然后发展了自己的发展方向)。
竞争的语言使Java面临压力,原因有二:
表现力
新功能可以使某些编程习惯用法更易于编写,从而使该语言对程序员更具吸引力。通常,一种语言提供的功能集是表达能力,语言复杂性和设计一致性之间的折衷:添加更多功能可以使语言更具表达力,但也更加复杂且难以掌握。
无论如何,在最近几年中,Java的竞争对手添加了Java所没有的许多新功能,这可以认为是一种优势。
炒作
是的,不幸的是,这是选择技术的一个因素,至少从我作为程序员的日常经验中可以看出:即使大多数团队成员不知道如何使用工具,工具也必须具有特定功能。那些能够使用它的人在大多数时候不需要它。
对于像经理这样的非技术人员来说,炒作可能更为重要,他们可能是决定某个项目平台的人。管理人员有时只记得一些关键字,例如lambda,并行性,多核,函数式编程,云计算等等。如果我们选择的技术在列表的每个项目上都带有绿色标记,那么我们是最新的。
因此,IMO一段时间以来一直在
- 语言稳定性和设计简单性的原始政策,一方面是庞大的代码库和开发人员社区,并且
- 竞争性语言的压力可能首先吸引Java程序员,首先是C#,然后是Scala,Clojure,F#(我知道我所知道的,也许还有其他)。
最终,Oracle决定升级Java以使其更具竞争力。在我看来,这些新功能特别针对那些可能会倾向于使用C#的Java程序员,他们认为其他语言(例如Scala和Clojure)与Java截然不同。另一方面,具有一定功能编程经验并且仍想使用JVM的开发人员可能已经切换到Scala,Clojure或其他语言。
因此,新的Java 8功能将使Java作为一种语言更加强大,并且声明的重点是并发和并行编程,但是升级似乎也解决了营销方面的问题(Oracle Java首席架构师Mark Reinhold说:“有些人会说添加Lambda表达式只是为了跟酷孩子在一起,这是有道理的,但是真正的原因是多核处理器;处理它们的最佳方法是使用Lambda”,请参阅本文)。
因此,是的,许多(所有)Java 8功能已经众所周知,但是为什么以及何时将功能添加到语言取决于许多因素:目标受众,现有社区,现有代码库,竞争对手,市场营销等。
编辑
关于“ ...我已经在SIC(1996)中阅读了有关流的信息”的简短说明:您是说需要Java 8 lambda来实现流吗?实际上,您可以使用匿名内部类来实现它们。