为什么Kotlin不需要明确地尝试和捕捉

例如:

FileOutputStream("file") 

会在Kotlin中编译,但是在Java中它会给编译器一个错误。 为什么?

Kotlin取消了Java的检查exception。 在编译时检查exception并在方法签名中声明,虽然Java开发人员很熟悉,但在Java社区之外 ,在一定程度上被认为是一个失败的实验。

所以Kotlin就废除了这些问题,并且用一些与使用资源(比如FileOutputStream )相关的样板文件来处理Java 7的try-with-resources资源 。

不要让一些意见干扰就很难回答。 我只想说Kotlin是针对大型软件项目的,并且给你Kotlin团队关于检查exception的声明(来自https://kotlinlang.org/docs/reference/exceptions.html ):

检查exception

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

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

追加追加(CharSequence csq)抛出IOException; 这个签名是什么意思? 它说,每次我追加一个字符串(StringBuilder,某种日志,控制台等),我必须赶上这些IOExceptions。 为什么? 因为它可能是执行IO(Writer也实现Appendable)…所以它导致到处都是这样的代码:

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

这是不好的,请参阅有效的Java ,项目65: 不要忽略exception。

Bruce Eckel在“Java是否需要检查exception”中说: :

对小程序的检查得出的结论是,要求exception规格既能提高开发人员的工作效率,又能提高代码质量,但是对于大型软件项目的经验表明,结果会有所不同 – 生产力下降,代码质量增加很少或没有增加。

其他这类引用:

Java的检查exception是一个错误 (Rod Waldhoff)

检查exception的麻烦 (Anders Hejlsberg)