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

看完scala,发现java中finally允许返回结果真的是一种极其错误的设计。
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一出生已经这样设计了,突然在某一版本中改变的话,向前兼容就成了一句空话。