【译文】Java 21 – Kotlin 是否正在消亡?
大多数人可能都知道,2023 年 9 月 19 日,JDK 21 正式推出,这使得使用它成为一个不错的主意。现在,距离该版本问世已经过去了半年时间,Kotlin 是否仍然有用,尤其是从后端编程的角度来看,值得了解一下。Kotlin 曾是替代 Java 的优秀编程语言,加快了多个开发和项目的进程,但随着新功能的推出,情况是否依然如此呢?在本文中,我们将深入了解 Java 21 中的三大新改进及其在 Kotlin 中的类似部分,即虚拟线程、模式匹配和重构。
虚拟线程(Project Loom)与 Coroutines
在 Java 21 中,并发性方面还有一个巨大的改进–虚拟线程(Virtual Threads)。无论何时您想创建普通线程,或者让执行器服务管理这些线程,这都是相当昂贵的操作。有了创建多个可快速并发运行的轻量级任务的可能性,就能更轻松地提高代码效率。
这里的关键问题是:既然使用这些线程工作非常相似,那么使用这些虚拟线程是否会有任何性能上的缺陷,或者是不同的缺陷?
根据多个讲座和文章,简短的答案是:没有:
虚拟线程不会取代Coroutines!
另一方面,长答案是
虚拟线程和例行程序都有不同的用例,并且会根据我们想在其中执行的操作做出不同的反应。目前,有两种解决方案可用于不同的用例,每个开发人员都必须了解是否应该使用哪一种。虚拟线程的另一个优势是使用相同的线程 API,这使得将旧代码更新为最新实践变得更加容易。对于 Kotlin 例程来说,它更倾向于基于事件的系统和高并发代码。Coroutines 目前支持开箱即用的结构化并发,而 Java 目前还不支持(虽然已经进入预览版)。
这里的关键是确保您了解使用这两种工具的优缺点。
模式比较
请看下面的代码
public class Main {
public static void main(String[] args) {
Point simplePoint = new Point(1, 2);
Point3 point3Dimensions = new Point3(1, 2, 3);
print(simplePoint);
print(point3Dimensions);
}
static void print(Object p) {
switch (p) {
case Point point -> System.out.println(point);
case Point3 point3Dimensions -> {
System.out.println("I found point 3:");
System.out.println(point3Dimensions);
}
default -> System.out.println("Other");
}
}
}
正如你所看到的,现在创建一个 switch case 语句非常简单,我们已经在 switch 语句中获得了对象的类型。我们可以访问字段和方法,无需将结果转换为给定类型,就能轻松地进一步评估下一个信息。
Kotlin 中也有非常类似的解决方案:
when (event) {
is Result.OK -> {
println("Success: ${event.data}")
}
is Result.Error -> {
println("Error occurred: ${event.errorMessage}")
}
}
由于 Java 中已经提供了这一功能,Kotlin 相对于 Java 的这一优势似乎被削弱了。
重构
让我们使用前面例子中类似的 Java 代码:
static void print(Object p) {
switch (p) {
case Point(var x, var y) -> System.out.println(x);
case Point3(var x, var y, var z) when x > 0 -> {
System.out.println("I found point 3:");
System.out.println(y);
}
default -> System.out.println("Other");
}
}
正如你所看到的,现在我们可以立即对记录进行重组,并立即访问我们需要的字段,以便进一步进行操作。不仅如此,我们还可以根据给定变量是否满足条件执行更多操作和指令。
这与使用多条件的 Kotlin when 语句非常相似,但必须在之后进行重构。
when (point) {
is Point -> {
val (x, y) = point
println("X: $x, Y: $y")
}
else -> println("unknown point")
}
结论
从这三点来看,Java 21 和 Kotlin 之间的差异似乎正在缩小。我相信在未来,当 Kotlin 的所有新功能(不仅仅是这 3 点)都出现时,人们就不会再去研究 Kotlin,而是会去研究 Java,因为有更多的工具可以快速、轻松地集成,而且不会出现任何奇怪的兼容性问题。
本文文字及图片出自 Java 21 - Is Kotlin Dying?
你也许感兴趣的:
- 【外评】不要把 Rust 写成 Java
- “甲骨文牌”Java正在死亡
- 您现在可以像运行 Python 一样运行 Java
- 从 Java 8 迁移到 Java 17 (二):Java 中值得注意的 API 变化
- 从 Java 8 迁移到 Java 17:新功能大汇总
- Oracle 再夺 Java 命?大公司用 Java 要小心了!
- 【程序员搞笑图片】java haters
- Java 22 新功能特性及示例
- Java 22 中最令人兴奋的 3 个功能
- 【译文】Java 22 的速度有多快?
你对本文的反应是: