为什么 Kotlin 不要求显式 try 和 catch

Nou*_*med 5 java exception kotlin

例如:

FileOutputStream("file") 
Run Code Online (Sandbox Code Playgroud)

在 Kotlin 中可以编译,但在 Java 中会出现编译器错误。为什么?

Nat*_*han 4

Kotlin 取消了 Java 的检查异常。在编译时检查并在方法签名中声明的异常虽然对 Java 开发人员来说很熟悉,但在Java 社区外部以及某种程度上内部都被广泛认为是失败的实验。

因此,Kotlin 废除了它们,并废除了一些与使用资源相关的样板文件(例如使用 Java 7 的try-with-resources的.useFileOutputStream方法简写)。

  • @NateVaughan 那么如果我不知道我能得到哪些,我该如何从中恢复呢?这就是所谓的 Pokemon 异常处理(catch-em-all)。抓住任何并且非常有帮助地告诉用户出了什么问题,但我不知道是什么?这正是 Kotlin 中异常的问题所在。 (4认同)
  • @NateVaughan 即使从 `Exception` 中辨别出 `IOException` 也有帮助,但这里没有什么“深思熟虑的、详细的”。文档中可能会缺少异常,原因很简单,库作者在编写文档时也没有任何编译器帮助。我也不明白为什么这种情况只会发生在您无法控制的代码中。在我自己的代码中,我经常忘记哪些方法可以抛出哪些异常,我宁愿让编译器告诉我,也不愿在注释中手动写出所有这些内容(您也可能忘记检查)。 (4认同)