Skip to content

前置检查与标准工具

Kotlin 标准库提供了一组简洁而强大的函数,用于在代码执行早期验证状态、参数有效性,或标记未完成的代码。熟练使用这些工具可以让你的代码更健壮、意图更清晰。

契约式检查 (Preconditions)

这些函数用于断言代码运行的先决条件。如果不满足条件,它们会抛出特定类型的异常。

参数检查:require

require 用于验证函数的参数是否合法。如果检查失败,抛出 IllegalArgumentException

kotlin
fun setPercentage(value: Int) {
    // 基础用法
    require(value in 0..100)
    
    // 带自定义错误消息 (推荐)
    require(value >= 0) { "Value must be non-negative, but was $value" }
}

状态检查:check

check 用于验证对象的内部状态。如果检查失败,抛出 IllegalStateException

kotlin
class Connection {
    var isOpen = false

    fun sendMessage(msg: String) {
        // 确保连接已打开
        check(isOpen) { "Connection is not open!" }
        // ...
    }
}

显式错误:error

当程序运行到逻辑上不应该到达的分支时,使用 error() 直接抛出 IllegalStateException

kotlin
val color = when (name) {
    "red" -> 0xFF0000
    "green" -> 0x00FF00
    else -> error("Unknown color: $name") // 也可以返回 null,视业务而定
}

空值检查:requireNotNull / checkNotNull

这两个函数用于确保值不为 null,并自动进行智能转换 (Smart Cast)。它们不仅检查,还会返回非空值

kotlin
fun processUser(user: User?) {
    // 如果 user 为 null,抛出 IllegalArgumentException
    val nonNullUser = requireNotNull(user) { "User is required" }
    
    // 之后可以直接使用 nonNullUser,类型为 User
    println(nonNullUser.name)
}

占位符 (TODO)

在开发过程中,我们经常需要先把结构写好,稍后再填充实现。TODO() 函数就是为此设计的。

kotlin
fun complexAlgorithm(): Int {
    // 抛出 NotImplementedError,并在控制台显示 "An operation is not implemented."
    TODO() 
}

fun withReason(): String {
    // 带原因的 TODO,IDE 也会高亮提示
    TODO("Wait for backend API v2") 
}

IDE 支持

IntelliJ IDEA / Android Studio 会特别对待 TODO()。它们会在 "TODO" 工具窗口中列出所有位置,并且将该路径标记为不可达代码(Unreachable code),从而避免编译器报“缺少返回值”的错误。

重复执行 (repeat)

简单的循环可以使用 repeat 函数替代 for 循环,语法更轻量。

kotlin
// 打印 5 次
repeat(5) { index ->
    println("Hello $index")
}

资源自动关闭 (use)

对于实现了 Closeable 接口的对象(如 IO 流),use 函数保证了块执行完毕后(无论成功还是抛出异常)都会自动关闭资源。这等同于 Java 的 try-with-resources。

kotlin
File("data.txt").inputStream().use { stream ->
    val data = stream.readBytes()
    // stream 在此处会自动关闭
}