看完scala,发现java中finally允许返回结果真的是一种极其错误的设计。

时间:2021-08-07 20:17:42
try{
return x;
}catch(Excpeiont e){
return y;
}
finally{
return z;
}

这样的代码无论如何都返回z,那么上面的任何return都显得没有意义。所以我们在绝大多数情况下都不会在finally中使用return语句,

因为这使得这个方法几乎返回一个恒定的结果。但这并不能保证一个水平很差的程序员在finally中返回结果。我说的是即使你有需要这样做,

也完全可以换个方式来达到目前的,而不是写出在finally中返回结果这样烂的代码,因为这本身是不符合逻辑的。


既然没有必要在finally中返回结果,又会引起一些人的误用,为什么不直接禁止在finally中返回结果呢?它本来的目的就是为了保证必要的“操作”

而不是“返回结果”。所以完全可以设计为在finally中禁止return语句,这样既达到本来的目的,又不会使用任何人误用。比如

    try{         return x;      }catch(Excpeiont e){         return y;      }      finally{         close(z);      }  

非常可惜的是这个意见还不能向JLS提出,因为从java一出生已经这样设计了,突然在某一版本中改变的话,向前兼容就成了一句空话。