第 10 章 Java 9 新特性

写作本书时(2017 年 6 月),Java SDK 9 已达到功能完成(Feature Complete)状态,但尚未发布。1 在众多新特性中,外界最为关注的当属 Jigsaw 项目(Project Jigsaw),它是 Java 9 引入的一种模块化(modularization)机制。

1Java SE 9 已于 2017 年 9 月 21 日正式发布。截至 2018 年 3 月 1 日,最新版本为 9.0.4。——译者注

这一章的范例将讨论 Java 9 的各种新特性,包括接口中的私有方法以及创建不可变集合所用的工厂方法,并介绍 StreamCollectorsOptional 新增的各种方法。所有范例均在 Java SE 9 Early Access build 174 下测试通过。

另一方面,本章讨论以下新特性:

  • JShell 交互式控制台
  • 改进的 try-with-resources 代码块
  • 钻石运算符(diamond operator)的轻松语法
  • 新增的弃用警告
  • 用于实现反应式流(Reactive Streams)的 Flow API
  • 用于实现栈遍历的 Stack-Walking API
  • 改进的 Process API

之所以不讨论这些特性,是因为它们要么用得不多(如钻石运算符、改进的 try-with-resources 代码块与弃用警告),要么较为专业(如 Stack-Walking API 和改进的 Process API)。而文档和教程对 JShell 的描述已很详细,本书不再赘述。

此外,虽然反应式流的引入令人眼前一亮,但开源社区已有 Reactive Streams、RxJava 等类似的 API 存在。对于社区将以何种方式支持新的 Java 9 API,静观其变或许更为稳妥。

这一章的范例有望涵盖最常见的用例,若非如此,本书下一版将增加更多用例。2

2那时候,Jigsaw 的细节应该已经很完善了——但愿如此。

此外,这一章的范例与其他章节略有不同。本书以用例驱动的形式编写和组织内容,每个范例致力于解决一个特定类型的问题。而这一章的部分范例只是对 Java 9 引入的新特性进行概述,不涉及具体类型的问题。