Kotlin中readLine()与readlnOrNull()的区别是什么?为何引入后者?
Kotlin
readLine() 与 readlnOrNull() 的区别及引入原因 核心区别
- 命名风格与语义直观性:
readlnOrNull()是Kotlin 1.6推出的标准化IO函数之一,命名更贴合Kotlin的风格——用ln替代Line,后缀OrNull直接点明“可能返回null”的特性,相比readLine(),开发者一眼就能理解其空值行为,无需额外记忆。 - 跨平台行为一致性:在JVM平台上两者行为一致,但在JS、Native等其他Kotlin支持的平台中,旧的
readLine()存在行为差异。readlnOrNull()是跨平台统一后的API,能保证在所有平台上的表现完全一致,避免平台间的隐性兼容问题。
为什么要引入readlnOrNull()
- 强化空安全语义:Kotlin的核心特性是空安全,
readlnOrNull()的命名直接呼应这一理念,比继承自Java的readLine()更符合Kotlin的设计哲学,让代码的空值逻辑更清晰。 - 配套非空API形成完整体系:它和
readln()(读取失败会抛出异常的非空版本)是一对互补API。readln()适合确定输入不会中断的场景,readlnOrNull()适合需要优雅处理输入结束的场景,二者分工明确,覆盖了不同的业务需求。 - 逐步迭代标准化API:
readLine()是早期Kotlin兼容Java的遗留API,随着Kotlin跨平台生态的成熟,需要一套统一、原生的IO工具链,readlnOrNull()就是这一迭代过程的产物,未来会成为推荐的行读取方式。
内容的提问来源于stack exchange,提问作者MatHazak
相关产品推荐
相关产品推荐

