DevCN
菜单
全部文章快讯开发深度热点

Kotlin 入门:用可空类型表示分钟数解析失败

使用 toIntOrNull 解析文本,借助 Int? 表示没有结果,保留合法零并理解空值处理、val 与范围表达式。


本节目标

使用 toIntOrNull 解析文本,借助 Int? 表示没有结果,保留合法零并理解空值处理、val 与范围表达式。

环境与运行方法

准备 JDK 和 Kotlin/JVM 编译器。保存为 Lesson.kt,执行 kotlinc Lesson.kt -include-runtime -d lesson.jar,然后运行 java -jar lesson.jar。示例使用 Kotlin 2.x 的稳定基础语法。

核心思路

Int? 可以是整数或 null。函数先解析,再检查业务上限,失败统一返回 null。调用者无需依赖异常来处理普通坏输入,也不必猜测特殊负数代表什么。

完整示例

fun minutes(text: String): Int? {
    val value = text.toIntOrNull() ?: return null
    return if (value in 0..1440) value else null
}
fun main() {
    for (text in listOf("30", "0", "x", "1441")) {
        val value = minutes(text)
        println(if (value == null) "invalid" else "ok=" + value)
    }
}

预期输出

ok=30
ok=0
invalid
invalid

逐步理解

Elvis 运算符在左侧为空时执行提前返回。成功后检查包含两端的 0..1440 范围。val 表示不能重绑定名称,但并不意味着它引用的所有对象都是不可变的。

输出只判断 null,所以零不会被误拒绝。统一 null 适合只需要成功或失败的场景;若需告诉用户是格式错误还是越界,应改用能携带原因的返回类型。

常见问题与边界

  • !! 不应代替正常空值处理。
  • 区间 .. 包含上界,until 不同。
  • 数字解析不会自动满足所有业务格式要求。

动手练习

加入 "1440"、"-1" 与空字符串。

参考答案

1440 返回有效整数,其他返回 null。若想区分两种失败原因,函数返回值需要更丰富的信息,不能靠调用者猜测。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。