可检查的异常
Kotlin不支持可检查的异常。有很多原因不需要支持这个特性,但是我们仍然要提供一个简单的例子。
下面的例子是一个JDK中的接口,该接口实现了StringBuilder类。
Appendable append(CharSequence csq) throws IOException;
它的签名信息说明了什么呢?这个签名的意思是添加一个字符串给某个对象(比如StringBuilder,某种类型的日志,输出打印等),调用方法处必须捕获一个IOExceptions。为什么呢?因为其有可能使用IO(Writer也实现了Appendable)。因此最终导致如下形式的代码:
try {
log.append(message)
}
catch (IOException e) {
// Must be safe
}
这样做一点好也没有,请查看Effective Java的item 65:不要忽略异常。
Bruce Eckel说了Does Java need Checked Exceptions?
对较小的程序的检查可以增强开发者的生产力和增强代码的质量,但是对于大型软件开发的经验来看,这样反而会降低生产力和很少或不会增加代码质量。
其他的引用:
- Java's checked exceptions were a mistake (Rod Waldhoff)
- The Trouble with Checked Exceptions (Anders Hejlsberg)