Java 22 发布

尚处孵化阶段的 Vector API 和 Project Valhalla

  • Vector API 已进入第 7 次孵化;评论者询问为什么它花了这么久。
  • 多位评论指出它依赖 Project Valhalla(值类型),这样向量才能高效、无分配地作为值对象使用。
  • 形成的共识是:进展缓慢是有意为之;JDK 开发者优先考虑极致的向后兼容性和长期规划。

Foreign Function & Memory Interface (FFI)

  • 许多人认为新的 FFI 是最有影响力的变化,它终于解决了 JNI/JNA 的痛点,并弥补了与 .NET/C# 之间的历史差距。
  • 对早期 FFI 和 jextract 的使用体验总体积极;相比 JNI,样板代码显著更少,也更容易接入现有的 C 库。
  • 有人担心对库卸载的强调,理由是过去本地库曾带来不稳定性。
  • 与 .NET 丰富的本地互操作能力(指针、联合体、函数指针、stackalloc、spans)相比,强调了 Java 追赶的距离仍然很大。

字符串模板与语法争论

  • 人们对 String Templates(STR / fmt processors)很感兴趣;关于确切语法的争论仍在继续,包括前缀形式与 $"...",以及是否使用反斜杠。
  • 这被描述为典型的“抠语法细节”(bikeshedding),但大家也认可语法正在被重新审视。

更适合初学者的 main 和 “Hello, World”

  • 新的简化入口点特性被称赞为教学和上手的一大进步,被比作 C# 的顶层语句。
  • 也有人不喜欢它,认为这是“伪装的”或特殊情况的语法,掩盖了真实概念(类、静态方法),并让解释变得更复杂。
  • 有人认为无论如何 Java 对初学者来说都还是太复杂;也有人觉得这种小幅的易用性改进还是有帮助的。

Java 与其他 JVM 语言

  • 反复出现的比较对象包括 Kotlin、Scala、Groovy:
    • 一些人认为 Kotlin 在编写代码和空值安全方面明显更好,但另一些人强调 Java 的生态、招聘便利性以及长期稳定性。
    • 有人把 Scala 描述为“正在衰落”或过于复杂;也有人反驳说现代 Scala 3 及其生态已经更容易上手。
    • Groovy 则两极分化:一方面因字符串插值、闭包、DSL 等脚本特性受到赞扬,另一方面又因像“糟糕的 DSL”(例如 Gradle、Spock)而受到批评。

其他新特性与生态观察

  • Stream Gatherers(JEP 461)引起兴趣,因为它们能支持新的 stream 操作;有评论者抱怨缺少静态扩展方法。
  • 虚拟线程引发争论:一些人认为它们带来了类似 Go 的高并发体验和更好的易用性;另一些人则指出之前已有用户态异步库,并担心复杂性以及 FFI 阻塞问题。
  • Java 缓慢但保持向后兼容的演进方式被广泛承认;有人欣赏这种“无聊”的稳定性,另一些人则抱怨许多项目仍停留在 Java 8/11,因为生态破坏(内部 API、javaxjakarta)导致升级困难。
  • 关于 macOS 的实际问题也浮现出来,例如该安装哪个 OpenJDK 发行版;建议是许多桌面应用现在都自带运行时,但不同发行版仍然可能让人困惑。