为什么只能尝试阻止?

时间:2018-08-05 19:29:36

标签: java kotlin try-catch

为什么在Kotlin中(除了在try-with-resources中,在Java中也是如此)仅编写try {}块是不可能的?例如:

允许使用此功能

fun tryFunction(){
    try{print("hello world!")}finally {}
}

这是不允许的

fun tryFunction(){
    try{print("hello world!")} //build error "Expecting 'catch' or 'finally'"
}

尽管第一个示例中的finally {}块没有作用

2 个答案:

答案 0 :(得分:4)

“尝试/捕获”,“尝试/捕获/最终”和“尝试/最终”的意思

  • “尝试执行某项操作,如果失败则执行...”
  • “尝试执行某些操作,如果失败,请先执行...,然后再执行...。”
  • “分别尝试做某事,然后再做....”。

尝试本身仅意味着“尝试做某事”-它隐含在所有您想尝试执行的代码中;因此您不需要像try这样的多余东西就能表达出来。

如果只想将语句放在自己的块中(例如,将变量作用域限定在该块中),则始终可以省略try

关于您的问题,为什么允许一个空的finally块:finally后面应该跟一个块,对于一个没有任何语句的块是有效的。十分罕见的是,您应该有一个空的finally块,因此不值得将其设为特殊的“非空块”语法元素。

答案 1 :(得分:1)

简单的答案是“因为这就是语言的定义方式”。

当然,他们可以确定裸try { ... }拥有一个假定的空白finally,但是那等同于根本没有try,那么为什么要打扰呢?