为什么在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 {}块没有作用
答案 0 :(得分:4)
“尝试/捕获”,“尝试/捕获/最终”和“尝试/最终”的意思
尝试本身仅意味着“尝试做某事”-它隐含在所有您想尝试执行的代码中;因此您不需要像try
这样的多余东西就能表达出来。
如果只想将语句放在自己的块中(例如,将变量作用域限定在该块中),则始终可以省略try
。
关于您的问题,为什么允许一个空的finally
块:finally
后面应该跟一个块,对于一个没有任何语句的块是有效的。十分罕见的是,您应该有一个空的finally块,因此不值得将其设为特殊的“非空块”语法元素。
答案 1 :(得分:1)
简单的答案是“因为这就是语言的定义方式”。
当然,他们可以确定裸try { ... }
拥有一个假定的空白finally
,但是那等同于根本没有try
,那么为什么要打扰呢?