《Effective Java》—— 抛出与抽象对应的异常和包含失败信息

        今天提到了一个异常相关的概念——异常链,也就是下层抛出的 异常经由try - catch 处理转换成一种上层需要的异常。比如提到的下面这个AbstractSequentialList类中找不到对应的element,下层抛出NoSuchElementException转换成为了上层List中需要的IndexOutOfBoundsException。

        这种处理从概念来说很好,因为很多时候代码复用会导致我们不知道这一次的调用和设计API的初衷是否相同。就像昨天下午分享提到的,在前台页面添加的功能越来越多,导致后台代码会出现一些问题,而本身方法的调用也越来越泛滥,修改其中一个地方容易引起Bug。所以很多下层引起的问题,就应该先在下层解决,不应该再由上层过多处理。

        但是从我们系统本身出发,一方面是很多异常其实都是业务上的数据或者业务逻辑带来的,而我们本身有一套errorCode来表示对应的异常,在transaction运行的最后会对OperationResult进行统一翻译处理,这一部分的业务异常就不需要过多考虑。另一方面则是系统框架或者Java本身运行的一些异常,比如乐观锁,在一些接口中触发乐观锁抛出的错会在下面判断转换成可以被retry的异常,交由上层判断是否重发。这一部分的内容就可以考虑使用异常链。

        至于后面第75条提到的包含失败信息,上面也有提到一个是业务报错,自有对应的代码处理。而其他异常在transaction中也会使用getCause的方法获取具体内容。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容