Kotlin编程实战:创建优雅、富于表现力和高性能的JVM与Android应用程序
上QQ阅读APP看书,第一时间看更新

2.1.4 try-catch是可选的

Java编译器强制我们显式地捕获或传播已检查的异常。关于已检查的异常是好是坏的争论可能永远不会得到解决——一些开发人员喜欢它,而另一些则讨厌它。我们不需要卷入这场争论,相反,让我们关注Kotlin都提供了什么。

Kotlin不会强迫你捕获任何已检查或未检查的异常。如果没有在函数调用周边放置一个try-catch,并且如果该函数崩溃了,异常将自动传播到函数或代码的调用方。如果一个异常没有得到处理,它将导致程序的决定性终止。

例如,在Java中,Thread类的sleep()方法抛出一个已检查的异常,编译器强制我们处理它。因此,对sleep()的任何调用都必须被一个try包围,然后经过一个不眠之夜,考虑如何处理可能从该调用中抛出的令人讨厌的InterruptedException。在Kotlin中,没有必要为这样的问题而失眠:

该代码没有任何try和catch,但是在执行时,它将打印两行输出,在打印完第一行之后有一秒的延迟。

为处理异常而进行防御性编程是一种很好的做法。与此同时,由于Kotlin没有强迫使用try-catch,因此我们不会试图放置那些粗糙的空catch块,许多Java程序员编写这些catch块只是为了使Java编译器能安静下来。记住,你不处理的内容将自动传播给调用方。

你已经看到了Kotlin编译器如何通过降低要求来提供诸多的灵活性。与此同时,编译器会查找代码中的潜在错误,以使代码更安全,我们将在下面看到。