我看过/读过的许多Kotlin教程都有这行代码:
var number = Integer.valueOf(readLine())
虽然它以前可以正常工作,但现在在使用Android Studio和Kotlin版本1.3.50
时会引发编译器错误。这表明类型不匹配,找到的是String?
,而需要的是String
。
当然,我理解为什么会发生这种情况,我知道用户可以通过控制台传入null或空值,因此它需要有可选的null声明,但我想了解如何修复编译器错误,并在不做太多更改的情况下保持类似的代码。
虽然我可以使用这两行代码:
var number = Integer.valueOf(readLine()!!)
以及
var number = Integer.valueOf(readLine() as String)
我相信它们会抛出不同的异常,如here所示
我知道我可以使用以下代码“修复”此问题:
var number : String? = readLine();
if(number == null){
number = "0"
}
val number2 = Integer.valueOf(number);
但是它看起来效率非常低,有没有一种更短的方法可以使用原生Kotlin代码来完成这个任务?
3条答案
按热度按时间wydwbb8l1#
如果我们简单地对
readLine()
的结果调用toInt()
,如果提供的值不是一个真正的整数,我们会得到一个异常。为了避免异常,我们可以使用Kotlin标准库中的toIntOrNull()
。在本例中,我们读取该行(作为
String?
),如果它不为空,则调用toIntOrNull()
;如果 that 不为空,则得到答案;否则,使用0
作为默认值。ymdaylpp2#
虽然我主要是一个Swift开发人员,但这是一个非常相似的概念,在Swift中它被称为nil合并操作符,但显然在Kotlin中它被称为Elvis操作符(嗯哼)。
这些文档是here,因此代码如下所示:
var num : String = readLine() ?: "0";
如果Elvis运算符
?:
之前的值不为空,则使用该值,否则使用您提供的第二个默认值。gev0vcfq3#
您还可以输入:
对我有用!