Kotlin中Integer.valueOf(readLine())与readLine()!!.toInt()哪种更优?
Kotlin读取用户输入转整数:两种方案对比分析
先明确两个方案的问题和适用性:
你的实现方案:distance = readLine()!!.toInt()
readLine()在输入流关闭时会返回null,!!是非空断言,遇到null直接抛出NullPointerException,在用户输入场景下风险极高,没法保证输入永远有效。toInt()是Kotlin原生扩展函数,语法更贴合Kotlin风格,但硬断言!!属于不安全写法,后续项目里绝对要避免。
提供的标准方案:distance = Integer.valueOf(readLine())
- 这个方案在Kotlin里编译不通过:
readLine()返回可空类型String?,而Java的Integer.valueOf()只接受非空String,必须加非空处理(比如readLine()!!)才能编译。 - 本质是调用Java工具方法,不如Kotlin原生的
toInt()或toIntOrNull()符合语言习惯。
后续项目的推荐写法
如果要安全处理用户输入,绝对不能依赖硬断言,推荐用空安全+转换失败处理:
val distance = readLine()?.toIntOrNull() ?: run { println("请输入有效的整数") readLine()?.toIntOrNull() ?: 0 // 可根据需求返回默认值或抛出友好异常 }
如果非要从你给出的两个方案里选,你的方案至少语法上能正常运行(虽有崩溃风险),而标准方案需要修改才能编译。但两个方案都不适合后续正式项目使用,必须替换为安全的空值和转换处理逻辑。
内容的提问来源于stack exchange,提问作者G Sekyere
相关产品推荐
相关产品推荐

