本文发表在 rolia.net 枫下论坛什么时候使用什么样的Exceptions,这是个问题。
解决这个问题的关键,是你站在什么样的角度来看这个问题。
如果你是一个API Designer,那么少用Checked Exception的做法是值得提倡的。如果在你的API里面抛出太多Checked Exceptions的话,会让客户程序员感到很不爽,你抛一个他就得接一个,就得处理一个。所以还不如定义返回值让他自己去做判断或直接抛出Unchecked Exception。
如果你是一个应用程序员,就是说,你这一层已经基本上可以说是最后一层了,那么适当的使用Checked Exception则可以很好的提高你的程序的可读性和可维护性。
那么,使用Checked Exception的原则是什么呢?用Bloch的话来说,就是:Use checked exceptions for recoverable conditions and run-time exceptions for programming errors
比如,举一个用户登录的例子,登录失败时应不应该用Checked Exception?这种情况是可以recoverable的,不属于programming errors,所以应该抛出一个LoginFailedException来处理这种情况。
另一个例子,当你new一个对象的时候,constructor所要求的参数本应传来一个正常的值,但结果却传来一个null,导致后面完全乱套。这种属于programming errors的现象,抛出一个IllegalArgumentException是最合适不过了。
至于Checked Exceptions带来的系统开销,不要担心,代码可读性和可维护性的提高带来的好处,是值得这些花费的。并且,你尽可以先优化其他不合理的地方,比如随处可见的new,尤其是循环里面的。
打个比方,你要省钱,最先要省的是不买五千块钱的皮鞋,八万块钱的领带,而不是每顿饭尽力省下五毛钱,对不对?更多精彩文章及讨论,请光临枫下论坛 rolia.net
解决这个问题的关键,是你站在什么样的角度来看这个问题。
如果你是一个API Designer,那么少用Checked Exception的做法是值得提倡的。如果在你的API里面抛出太多Checked Exceptions的话,会让客户程序员感到很不爽,你抛一个他就得接一个,就得处理一个。所以还不如定义返回值让他自己去做判断或直接抛出Unchecked Exception。
如果你是一个应用程序员,就是说,你这一层已经基本上可以说是最后一层了,那么适当的使用Checked Exception则可以很好的提高你的程序的可读性和可维护性。
那么,使用Checked Exception的原则是什么呢?用Bloch的话来说,就是:Use checked exceptions for recoverable conditions and run-time exceptions for programming errors
比如,举一个用户登录的例子,登录失败时应不应该用Checked Exception?这种情况是可以recoverable的,不属于programming errors,所以应该抛出一个LoginFailedException来处理这种情况。
另一个例子,当你new一个对象的时候,constructor所要求的参数本应传来一个正常的值,但结果却传来一个null,导致后面完全乱套。这种属于programming errors的现象,抛出一个IllegalArgumentException是最合适不过了。
至于Checked Exceptions带来的系统开销,不要担心,代码可读性和可维护性的提高带来的好处,是值得这些花费的。并且,你尽可以先优化其他不合理的地方,比如随处可见的new,尤其是循环里面的。
打个比方,你要省钱,最先要省的是不买五千块钱的皮鞋,八万块钱的领带,而不是每顿饭尽力省下五毛钱,对不对?更多精彩文章及讨论,请光临枫下论坛 rolia.net