Kotlin编码窍门之异常(Exceptions)

异常类(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互操作性章节...

你可能感兴趣的:(Kotlin编码窍门之异常(Exceptions))