受检查的异常需要捕获或者catch吞掉(一般做法是重新包装一个RuntimeException抛出去),在重载一些接口或类的方法时可能必须要catch(包括 lambda 表达式)
- 其他语言应该基本上没有这样做的
- 从语义上,其实 Checked Exception 和 Runtime Exception 不好定界,导致不同的框架或第三方库有不同的偏好。举个栗子,Spring 系基本上不会用受检查异常,Jackson 基本上所有 API 都声明了 IOException。
- 虽然 Checked Exception 会告诉你需要处理这种异常,但是 Runtime Exception 在有些时候你也需要处理,这个就变成了隐藏的雷。而其实更多时候,Checked Exception 其实也不需要做过多的处理,所以代码中有很多
catch (EXception ex) { throw new XXXRuntimeException(ex); }