【第43条】抛出的异常要合适于相应的抽象

本文讨论了在编程中如何通过异常转译来提高代码的可读性和可维护性。介绍了如何用更具有语义的异常替换底层的具体异常类型,以及何时应当自定义异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    如果一个方法抛出的异常与它所执行的任务没有明显关联关系的话,会使人感到不知所措。为了避免这个问题,应该在高层的实现中俘获底层抛出的“低级”异常,并同时用另一“高级”异常继续向外抛。

 

   例如,如我们在方法中,有一段循环,一个一个地取集合的一下元素。当catch到一个 NoSuchElementException 或 NullPointerException 时,说明已经到头儿了。这时我们可以 new 一个 IndexOutOfBoundsException 并向上抛出。对于此方法的调用者来说,这个异常显然比前两个更有实际意义。这被称为异常转译

 

    但是,尽管异常转译比不加选择地传递低层异常的做法有所改进,但是这也不能被滥用。

 

    当然,“高层”的异常也可以是你的自造异常。如一个和文件相关的操作,如果你的设计并不在意文件操作是因何而失败的话。那么你大可以将 FileNotFoundException 和 IOException 等 可能出现的“低层”异常都转化为你自己的 FileOperationException。当然,这还有一个前提,就是对照上一条先判断一下这里出现一个你自己自造的异常是否合适,还是就该使用那些标准的“低层”异常。

 

 

 

【Effective Java 学习笔记】系列连载专题请见:
http://tonylian.iteye.com/categories/64208

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值