为什么Kotlin不需要尝试并明确捕获

时间:2017-12-09 22:19:21

标签: java exception exception-handling kotlin

例如:

FileOutputStream("file") 

将在Kotlin中编译,但在Java中会产生编译错误。为什么呢?

2 个答案:

答案 0 :(得分:2)

Kotlin取消了Java检查过的例外情况。尽管Java开发人员很熟悉,但在编译时检查并在方法签名中声明的异常被广泛认为是失败的实验outside以及某种程度上inside Java社区。

因此Kotlin取消了它们,并且使用了一些与使用资源(例如FileOutputStream)相关的样板,并使用.use方法简化了Java 7的try-with-resources

答案 1 :(得分:1)

如果不让一些意见干涉,可能很难回答。我只想说Kotlin针对的是大型软件项目,并为您提供Kotlin团队关于检查异常的声明(来自https://kotlinlang.org/docs/reference/exceptions.html):

  

已检查的例外情况

     

Kotlin没有检查异常。原因有很多   这个,但我们将提供一个简单的例子。

     

以下是由JDK实现的示例接口   StringBuilder类:

     

Appendable append(CharSequence csq)抛出IOException;这是什么   签名说?它说每次我都附加一个字符串   (一个StringBuilder,某种日志,一个控制台等)我必须抓住   那些IOExceptions。为什么?因为它可能正在执行IO(Writer   也实现了Appendable)...所以它会产生这种代码   在这个地方:

try {
    log.append(message)
}
catch (IOException e) {
    // Must be safe
}
     

这不好,见Effective Java,第65项:不要忽视   异常。

     

Bruce Eckel在Does Java need Checked Exceptions?中说:

     
    

对小型课程的考试导致了要求的结论     异常规范可以提高开发人员的工作效率     提高代码质量,但体验大型软件项目     提出了不同的结果 - 降低了生产力,很少或没有     提高代码质量。

  
     

此类其他引用:

     

Java's checked exceptions were a mistake(Rod Waldhoff)

     

The Trouble with Checked Exceptions(Anders Hejlsberg)