1. Kotlin 与 Java 的互操作边界,空安全、扩展函数、协程与 Java 代码的桥接注意点如何?
请说明 Kotlin 与 Java 的互操作边界,包括空安全、扩展函数、协程与 Java 代码的桥接注意点?
- 空安全与平台类型
- 扩展函数与静态方法
- 协程与 suspend 的桥接
Kotlin 与 Java 互操作时需注意边界。空安全:Kotlin 区分可空与非空类型,而 Java 的类型无空标记,Java 传出的类型在 Kotlin 中是"平台类型"(Type!),可空性由开发者自行判断,若 Java 返回 null 而 Kotlin 当作非空,会编译通过但运行时 NPE,需用注解(@Nullable/@NonNull)或谨慎处理。扩展函数:Kotlin 扩展函数编译为静态方法,Java 侧需通过类名调用(如 FileKt.ext(list)),不能直接调用。协程:Kotlin 的 suspend 函数编译为带 Continuation 的方法,Java 调用很繁琐,需通过 runBlocking 或回调桥接。互操作注意点还包括:默认参数、伴生对象、@JvmOverloads、@JvmStatic 等。理解这些边界才能平滑混用两种语言。
互操作边界源于"Kotlin 编译为 Java 字节码"但语义不同:平台类型、扩展函数静态化、suspend 编译为 Continuation。理解这些映射是桥接两语言的关键。