Java 简明教程
Java 10 - New Features (APIs & Options)
Java 10 是 Java 发布节奏中的一个主要版本,它于 2018 年 3 月 10 日发布。对于 Java 10,Oracle 已将 java 发布节奏更改为一种新模式,为 Oracle Java SE 产品制定了 6 个月的发布节奏和 LTS 模式。LTS 模式代表长期支持模式。
从 Java 10 开始,Oracle 每 6 个月发布一个新版本的 Java,每个版本包含一个或两个主要特性。Oracle 使用发布周期概念。每个发布周期安排 6 个月。在这个时间范围内开发的特性都会在该版本中发布,否则该特性将移至下一个发布周期。
Oracle JDK vs OpenJDK
大多数 Oracle JDK 二进制文件是专有的,由 Oracle 许可,并且对再分发有多种限制。而 OpenJDK 更适合开发人员社区。从 Java 10 开始,Oracle 决定将 OpenJDK 作为主要的 JDK 来促进基于社区的 Java 开发。Oracle 将继续生成自己的 JDK,但将在 3 年后发布它们,并将其称为 LTS 版本。因此,OpenJDK 二进制文件将在每六个月后发布。
OpenJDK 兼容云和容器,因为它可以作为容器的一部分免费分发。因此,Oracle 推广 OpenJDK 的举措使 Java 更适合于云或容器的开发和部署。
Java 9 和 Java 10 是非 LTS 版本。Java 11 版本是 LTS 版本。
Java 10 New Features
以下是在 Java 10 中引入的主要新特性。
-
JEP 286 − Local Variable Type Inference
-
JEP 322 − Time-Based Release Versioning
-
JEP 304 − 垃圾收集器接口
-
JEP 307 − G1 的并行全 GC
-
JEP 296 − Consolidate the JDK Forest into a Single Repository
-
JEP 310 − Application Class-Data Sharing
-
JEP 319 − Root Certificates
-
JEP 317 − 基于 Java 的实验性 JIT 编译器
-
JEP 312 − Thread-Local Handshakes
-
JEP 313 − 移除了本机头生成工具
在 Java 10 中,对 70 多个 API 进行增强,添加了新方法和选项,并移除了已弃用的 API 和选项。我们将在下一章中了解这些更改。
APIs to create Unmodifiable Collections
在 List、Set 和 Map 接口中有新的 copyOf() 方法,它可从现有集合中创建新的集合实例。Collector 类拥有方法 toUnmodifiableList(), toUnmodifiableSet(), and toUnmodifiableMap(),用于将流的元素弄成不可修改的集合。
javadoc Support for Multiple Stylesheets
新的选项以 --add-stylesheet 的形式提供给 javadoc 命令。此选项支持在生成的文档中使用多个样式表。
javadoc Support for Overridding methods
新的选项以 --overridden-methods=value 的形式提供给 javadoc 命令。由于许多类均会覆盖继承的方法但不会更改规范,因此 --overridden-methods=value 选项允许将这些方法与其他继承方法组合到一起,而不是单独再次描述它们。
javadoc Support for Summary
新的内联标签 {@summary …} 提供给指定要作为 API 描述摘要的文本。默认情况下,API 描述的摘要是从第一句话推断出来的。
Example
以下程序展示了 JAVA 10 中一些新 API 的使用。
import java.util.List;
import java.util.stream.Collectors;
public class Tester {
public static void main(String[] args) {
var ids = List.of(1, 2, 3, 4, 5);
try {
// get an unmodifiable list
List<Integer> copyOfIds = List.copyOf(ids);
copyOfIds.add(6);
} catch(UnsupportedOperationException e){
System.out.println("Collection is not modifiable.");
}
try{
// get an unmodifiable list
List<Integer> evenNumbers = ids.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toUnmodifiableList());;
evenNumbers.add(6);
}catch(UnsupportedOperationException e){
System.out.println("Collection is not modifiable.");
}
}
}