Kotlin 语言特性分享会
语音开发小组内部技术分享

Kotlin 语言特性分享会

Kotlin 语言特性分享会,从基础特性到协程并发,构建高质量 Android 应用

约 45 分钟 20 个核心知识点 代码实战导向
Phase 1

基础特性

1 空安全体系

可空类型 / 非空类型 基础

在 Kotlin 中,类型系统默认是非空的,赋值 null 会导致编译错误。可空类型通过 ? 标记。

kotlin
fun main() {
    // 非空类型:不能赋值 null
    var normalStr: String = "Hello"
    // normalStr = null  // 编译报错

    // 可空类型:加 ? 允许为 null
    var nullableStr: String? = null
    nullableStr = "Kotlin"
}

?. 空安全调用

对象为 null 时不执行后面方法,直接返回 null,不会 NPE。

kotlin
fun main() {
    var str: String? = null

    // 安全调用:null 就短路,不报错
    val len = str?.length
    println(len) // null

    str = "Android"
    println(str?.length) // 7
}

?: Elvis 埃尔维斯运算符

为空时给默认值,语法:表达式 ?: 默认值

kotlin
fun main() {
    var str: String? = null

    // 为 null 取后面默认值
    val realStr = str ?: "默认字符串"
    println(realStr) // 默认字符串

    str = "Kotlin"
    val realStr2 = str ?: "默认字符串"
    println(realStr2) // Kotlin

    // 常用:为空直接 return
    val name: String? = null
    val info = name ?: return
    println("不会走到这里")

}

!! 非空断言

强行告诉编译器:一定不为 null,出错直接抛 NPE,慎用,业务代码尽量避免。

kotlin
fun main() {
    var str: String? = "测试"
    // 强行断言非空
    println(str!!.length)

    // 一旦真的为 null,直接崩溃 NPE
    str = null
    // println(str!!.length) // 运行时 NullPointerException
}

组合用法:?. + ?: 最常用标准写法

kotlin
fun main() {
    val str: String? = null

    // 为空调用默认值,不为空取长度
    val length = str?.length ?: 0
    println(length) // 0
}
平台类型(Java 类型坑点)
Kotlin 调用 Java 代码时,平台类型可空性模糊,容易 NPE。Java 返回的类型在 Kotlin 中可能既可以当 String 也可以当 String?。

空安全体系总结

  • Type? 标记可空,默认 Type 不可空
  • ?. 安全调用,null 直接短路
  • ?: 空就给默认值 / 空就 return
  • !! 强行断言,慎用,容易 NPE
  • 优先用 ?.?:,杜绝无脑 !!
Phase 2

协程 Coroutine