Kotlin编码窍门之异常(Exceptions)
2017-06-08 本文已影响0人
已迁至知乎_此不再维护
异常类(Exception Classes)
Kotlin中所有的异常类都是Throwable
的子类。每个异常都有消息、堆栈回溯信息和可选的原因。
要抛出一个异常对象,使用throw
表达式:
throw MyException("Hi There!")
为了捕获一个异常,使用try
表达式:
try {
// some code
}
catch (e: SomeException) {
// handler
}
finally {
// optional finally block
}
可以有0到多个catch
块,finally
块可以省略。但是catch
块和finally
块至少应该存在一个。
try是一个表达式(Try is an expression)
try
是一个表达式,也就是说,它可以有一个返回值:
val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
try
表达式的返回值要么是try
块的最后一个表达式,也哦么是catch
块的最后一个表达式。finally
块对try
表达式的结果没有影响。
检查异常(Checked Exceptions)
Kotlin没有检查异常(编译时异常)。原因有很多,我们仅提供一个简单的例子。例子省略...
Nothing类型(The Nothing type)
在Kotlin中,throw
是一个表达式,因此可以将其作为Elvis表达式的一部分:
val s = person.name ?: throw IllegalArgumentException("Name required")
throw
表达式的类型是Nothing
。该类型没有值,仅用于标记该代码位置永远不可能到达。在你的代码中,你可以使用Nothing
来标记一个永远不会返回的函数:
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
当你调用该函数的时候,编译器将知道执行不会超出调用:
val s = person.name ?: fail("Name required")
println(s) // 's' is known to be initialized at this point
Java互操作性
参见Java互操作性章节...