kotlin Kotlin 2.3.0-RC¶
为什么要使用 Kotlin¶
你是否曾凝视着屏幕上连绵不绝的 Java 样板代码,感到灵魂正在被一丝丝抽干?你是否在无尽的 NullPointerException 迷宫中反复碰壁,精疲力竭?我们曾经陷入这样的困境:一个被冗长、繁琐和潜在风险所缠绕的旧世界,消耗着我们的创造力与热情。
但转折点就在这里。Kotlin 的出现,并非仅仅是为 JVM 增添另一门语言,而是一次沉默的反抗,一场优雅的叛逃。它保留了你所信赖的一切基石,却悄然移除了所有让你皱眉的绊脚石。想象一下,用原本三分之一的代码量,清晰无误地表达你的全部意图;想象一下,编译器成为你警惕的盟友,在错误发生前就将其消弭于无形。这不仅仅是效率的提升,这是一种心智模式的解放——让你从机械的语法看守者,重新变回专注问题解决的创造者。选择 Kotlin,就是选择不再与工具搏斗,而是让工具赋能你的思想,将宝贵的生命时光倾注于构建价值本身。
Kotlin 是什么¶
Kotlin 是一门由 JetBrains 打造的现代、简洁且安全的编程语言。它完全兼容 Java,可以无缝使用所有现有 Java 库和框架,但通过更直观的语法和强大的特性,让你写出更少犯错、更易阅读的代码。它就像 Java 的进化形态,专为高效和愉悦的开发体验而生。
入门示例¶
真实场景: 你需要快速构建一个简单的待办事项(Todo)应用的业务逻辑层,包括数据模型和基础操作。
Java 实现片段:
public class TodoItem {
private final String title;
private boolean isCompleted;
public TodoItem(String title) {
this.title = title;
this.isCompleted = false;
}
// 紧接着需要生成一大堆 getter、setter、equals()、hashCode()、toString() 方法...
}
Kotlin 实现相同功能:
data class TodoItem(val title: String, var isCompleted: Boolean = false)
fun main() {
// 创建实例
val task = TodoItem("学习Kotlin")
// 复制并修改,原有对象不变(得益于`data class`的`copy`函数)
val completedTask = task.copy(isCompleted = true)
// 清晰的结构化打印(得益于自动生成的`toString`)
println(completedTask) // 输出: TodoItem(title=学习Kotlin, isCompleted=true)
}
看到了吗? 在 Kotlin 中,一行 data class 声明就替代了 Java 中数十行的样板代码。val 代表只读变量,var 代表可变变量,空安全机制让 NullPointerException 成为罕见事件。你可以更专注于业务逻辑,而不是语言的繁琐规则。这就是 Kotlin 的魅力——用简洁表达强大。
Kotlin 2.3.0-RC 版本更新了什么¶
Kotlin 2.3.0-RC 版本主要是为即将到来的 Compose Multiplatform 1.6.0 稳定版 提供全面支持。本次更新重点在于打磨和修复问题,涉及编译器对Compose的更好处理、Wasm(WebAssembly)目标平台的稳定性修复、Gradle插件与最新AGP(Android Gradle Plugin)的兼容性改进,以及贯穿编译器、调试器、标准库的各类问题修复,旨在为多平台UI开发的稳定体验铺平道路。
更新日志¶
Changelog¶
后端. Wasm¶
- K/Wasm:修复了
kotlin.wasm.internal.getSimpleName在 iOS Safari 26 以下版本中崩溃的问题。
编译器¶
- 调试器:无法评估 JvmInline 值类参数。
- Kotlin 调试器:在调试期间,作为上下文参数的值类在变量视图中显示的名称不正确。
- 修复了调用具有类型参数边界的 Java 方法时出现的类型引用不匹配问题。
- 修复了在使用
-language-version 2.2时出现的假阳性类型不匹配错误。 - K2:在 Java 相关的 lambda 表达式中,
Any?.toString()导致空指针异常。 - K/N:修复了值类上意外的“实际声明缺少
@JvmInline注解”警告。
Compose 编译器¶
- iOS:修复了平台声明冲突问题,即多个函数具有相同的 IR 签名。
IR. Actualizer¶
- 修复了在 IR 中启用注解遍历后,
IrNoExpectSymbolsHandler仍能找到预期类引用的问题。
IR. Tree¶
- 修复了针对具有泛型可变参数函数的可调用引用出现的“此阶段不应出现带有可变参数的可调用引用”的非法状态异常。
JVM. 反射¶
- 修复了
isSubtypeOf方法中的ClassCastException(CapturedKType 无法转换为 AbstractKType)。 - 反射:在新的实现中,FunctionN 类的函数超类型具有灵活类型。
JavaScript¶
- KJS:修复了在 2.3.0-Beta½ 版本中更改代码后出现的“
callAgent.jsonRpcCall_...不是函数”的类型错误。 - 修复了运行 jsBrowserTest 时出现的“IrClassSymbolImpl 未绑定”的非法状态异常。
标准库¶
- K/N:CMP:修复了未定义符号
_kfun:kotlin.time.Duration.kotlin.time.Duration的问题。 - 修改了
Duration.parseOrNull的内部逻辑,避免抛出异常。
工具. 编译器插件 API¶
- 修复了编译器插件顺序不生效的问题。
工具. Gradle¶
- 在 FUS 使用统计中报告 webMain / webTest 的使用情况。
- 修复了在使用禁用内置 Kotlin 的 AGP 9.0.0-alpha 版本时出现的冲突警告。
- 在集成测试中,提供了 iOS 模拟器启动失败的解决方案。
- 修复了 Gradle 插件 API 参考中编译器参数类型不可用的问题。
工具. Gradle. 多平台¶
- 修复了在 AGP 9.0+ 中设置
android.builtInKotlin=false并使用kotlin-multiplatform插件时导致的类转换异常。 - 修正了 KGP 警告中关于 AGP 应用程序兼容性的不正确建议。
工具. Gradle. Native¶
- 修复了执行
commonizeCInterop时出现的找不到“`kotlinNative