Alex Buckley
1996 年,James Gosling、Bill Joy 和 Guy Steele 为 Java® 语言规范 的第一版写了:
“我们相信 Java 编程语言是一种成熟的语言,可以广泛使用。尽管如此,我们预计未来几年该语言会发生一些演变。我们打算以与现在应用程序完全兼容的方式管理这种演变。”
Java SE 8 代表了 Java 语言历史上最大的一次金华。相对较少的特性 —— lambda 表达式、方法引用和函数式接口 —— 结合起来提供了一个融合面向对象和函数式风格的编程模型。在 Brian Goetz 的领导下,这种融合以一种鼓励最佳实践的方式完成 —— 不变性、无状态、组合性 —— 同时保留“Java的感觉” —— 可读性、简单性、通用性。
至关重要的是,Java SE 平台的库与 Java 语言共同发展。这意味着使用 lambda 表达式和方法引用来表示行为 —— 例如,应用于列表中每个元素的操作 —— 是 "开箱即用" 的高效和高性能。以类似的方式,Java 虚拟机与 Java 语言共同进化,以确保在独立编译的约束条件下, default 方法在编译时和运行时尽可能一致地支持库的发展。
自 20 世纪 90 年代以来,向 Java 语言添加一级函数的计划就已经出现了。2007 年左右的 BGGA 和 CICE 提案为这个话题带来了新的活力,而 2009 年左右在 OpenJDK 中创建的项目 Lambda 吸引了前所未有的兴趣。Java SE 7 中向 JVM 添加的方法句柄为新的实现技术打开了大门,同时保留了“一次编写,随处运行”的原则。随着时间的过去,语言的变化由 JSR 335 —— Java编程语言的Lambda表达式 —— 监督,其专家组包括 Joshua Bloch、Kevin Bourrillion、Andrey Breslav、Rémi Forax、Dan Heidinga、Doug Lea、Bob Lee、David Lloyd、Sam Pullara、Srikanth Sankaran 和 Vladimir Zakharov。
编程语言设计通常涉及处理完全不为语言用户所知的复杂程度。(因此,它经常被比作冰山:它 90% 的部分是看不见的。)在 JSR 335 中,最大的复杂性隐藏在隐式类型 lambda 表达式与重载解析的交互中。在这一领域和许多其他领域,Oracle 的 Dan Smith 做了一项出色的工作,彻底地指定了所需的行为。他的话可以在整个规范中找到,包括一个关于类型推断的全新章节。
Java SE 8 中的另一个举措是增强注解的实用性,这是 Java 语言最流行的特性之一。首先,Java 语法已经扩展到允许在许多语言结构中对类型进行注解,从而形成了新的静态分析工具(如 Checker 框架)的基础。这个特性由 JSR 308 “Java类型注解” 指定,由 Michael Ernst 和我自己、Doug Lea 和 Srikanth Sankaran 组成的专家组负责。该规范中涉及的变化是广泛的,Michael Ernst 和 Werner Dietl 多年来的不懈努力得到了热烈的认可。其次,注解可以在语言构造上“重复”,这对用注解类型建模特定领域配置的 api 有很大的好处。Java EE 的 Michael Keith 和 Bill Shannon 发起并指导了这个特性。
Oracle Java 平台组的许多同事已经为该规范提供了宝贵的支持:Leonid Arbouzov, Mandy Chung, Joe Darcy, Robert Field, Joel Borggrén-Franck, Sonali Goel, Jon Gibbons, Jeannette Hung, Stuart Marks, Eric McCorkle, Matherey Nunez, Mark Reinhold, Vicente Romero, John Rose, Georges Saab, Steve Sides, Bernard Traversat和Michel Trudeau。
也许最应该感谢的是编译器工程师,他们把规范变成了真正的软件。Oracle 的 Maurizio Cimadamore 从最早开始就英勇地致力于 lambda 表达式的设计和在 javac 中的实现。Eclipse 中对 Java SE 8 特性的支持由 Jayaprakash Arthanareeswaran、Shankha Banerjee、Anirban Chakraborty、Andrew Clement、Stephan Herrmann、Markus Keller、Jesper Møller、Manoj Palat、Srikanth Sankaran 和 Olivier Thomann 贡献;Anna Kozlova, Alexey Kudravtsev 和 Roman Shevchenko 合著的 IntelliJ 。他们值得整个 Java 社区的感谢。
Java SE 8 是 Java 语言的复兴。虽然有些人在寻找“下一个伟大的语言”,但我们相信,用 Java 编程比以往任何时候都更令人兴奋和高效。我们希望它继续适合你。