JDK 20:switch语句和表达式的模式匹配将在2023年3月发布的下一版标准Java中进行第四次预览。

Java 20是标准Java的下一个计划版本,最近又增加了四个拟议的功能,尽管它们是以前在标准Java中预览或孵化的功能,现在又要预览(或孵化)了。为Java 20 或JDK(Java开发工具包)20新提议的功能是第二次预览记录模式、外来函数和内存API以及虚拟线程。结构化并发将在JDK 20中重新孵化。

这些都加入了之前提出的功能,即switch语句和表达式的模式匹配,预计将在即将发布的Java SE(标准版)中进行第四次预览。尽管OpenJDK的JDK 20网页仍然没有列出计划发布的功能,但OpenJDK的Java增强建议(JEP)索引引用了这五个功能。

  • 记录模式:用记录模式增强Java编程语言,以解构记录值。记录模式和类型模式可以嵌套,以实现数据导航和处理的声明性、强大和可组合的形式。该提案的目标包括扩展模式匹配以表达更复杂的、可组合的数据查询,并且不改变类型模式的语法或语义。自JDK 19第一次预览以来的主要变化包括:增加了对通用记录模式(Record Pattern)的类型参数推断的支持,支持记录模式出现在增强的for语句的标题中,并删除了对命名记录模式的支持。
  • 外来函数和内存 API 介绍了 Java 程序可以与 Java 运行时之外的代码和数据进行互操作的 API。该API使Java程序能够调用本地库并处理本地数据,而没有JNI(Java Native Interface)的脆性和危险。该API以前在JDK 17和18版本中进行过孵化,并在JDK 19中进行过预览。自JDK 19以来增加的改进包括统一MemorySegmentMemoryAddress抽象,增强MemoryLayout层次结构,以及将MemorySession拆分为ArenaSegmentScope以促进跨维护边界的段共享。
  • 虚拟线程是轻量级的线程,可以减少编写、维护和观察高吞吐量并发应用的工作量。自第一次预览以来的微小变化包括在JDK 19中被永久化的少量API变化和对ThreadGroup的降级,也在JDK 19中被永久化。
  • 结构化并发具有简化多线程编程的API,并将在不同线程中运行的多个任务视为一个工作单元。错误处理和取消被简化了,提高了可靠性并增强了可观察性。JDK 19中正在酝酿的唯一变化是更新了StructuredTaskScope,以支持在任务范围内创建的线程继承范围内的值。
  • switch语句和表达式的模式匹配被认为是一种机制,可以使复杂的面向数据的查询得到简洁和安全的表达。之前在JDK 17、JDK 18和JDK 19中进行了预览,第四次预览将实现与Record Patterns的持续共同发展,Record Patterns也作为预览包含在JDK 19中,允许根据经验和反馈进行持续改进。自第三次预览以来,switch的模式匹配的主要变化包括简化switch标签的语法,以及支持switch语句和表达式中通用模式和记录模式的类型参数的推断。另外,如果在运行时没有切换标签适用,对一个枚举类的详尽切换现在会抛出MatchException而不是IncompatibleClassChangeError

JDK 20的其他可能功能包括通用泛型和字符串模板。JDK 20的早期访问版本可以在jdk.java.net上找到。