也就是说,在使用checkedException时,你必须确认这里的的确确是应该抛出一个异常,否则不要乱抛。如果一个方法会抛出一个或者多个被检查的异常,那么调用该方法的代码就必须要么在一个或几个try-catch块中处理这些异常,要么就要声明(throws)它们,以便向上抛出去。而无论哪种方法,都给程序员增添了不可忽略的负担。
回想一下上一条最后一段关于.Net为什么选择了更为简单化的异常处理,避免这种负担或许就是其中一大原因。(.Net中根本就没有throws这个语法)
解决方案是:
1)尽量在API内部处理掉checkedException。如输出错误信息或写日志后,结束当前程序。
2)对于那些本来就是该向外抛出异常来表明内部的某种失败的情况下,调用者尽量在调用之前确保可以成功再调用。见【第39条】的“状态检测”方式
3)在适当的时候,使用RuntimeException。如果API不能做的更好,也许RuntimeException会更为适合。
【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208