Ale*_*xis 5 kotlin kotlin-nothing
为什么下面的代码是错误的?
fun alwaysThrow() {
throw Error("Sorry")
}
fun checkNumber(arg: Int): Int {
if (arg > 10) {
return arg
}
alwaysThrow()
}
fun main() {
try {
checkNumber(20)
} catch (e: Error) {
println("Error caught: ${e.message}")
}
}
Run Code Online (Sandbox Code Playgroud)
该函数checkNumber无法编译并出现错误:
具有块体的函数中需要“返回”表达式(“{...}”)
我不明白为什么,因为过去的任何事情都不会被执行alwaysThrow。
有没有办法告诉编译器?
由于某种原因,这段代码确实可以编译:
fun checkNumber(arg: Int): Int{
if (arg > 10) {
return arg
}
throw Error("Sorry")
}
fun main() {
try {
checkNumber(1)
} catch (e: Error) {
println("Error caught: ${e.message}")
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将这一信息告知 Kotlin 编译器。这就是为什么你需要Nothing输入:
fun alwaysThrow(): Nothing {
throw Error("Sorry")
}
Run Code Online (Sandbox Code Playgroud)
没有什么是没有实例的。您可以使用 Nothing 来表示“一个从不存在的值”:例如,如果一个函数的返回类型为 Nothing,则意味着它从不返回(总是抛出异常)。
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |