关于自定义异常的层次

news/2024/7/7 19:06:18

纵观众多的开源框架,甚至是jdk自身,异常几乎总是按一定的类层次结构组织起来。那种认为一个系统只需要提供一个异常基类,其余所有异常都是只需要继承这一个基类的观点是武断和片面的。我们至少可以从两个方面来认识异常层次的重要性:

一、有时候我们关心某一种具体的异常,需要对其做特别地处理,而有的时候,我们只需要对“一组相近”的异常做出同样的处理,在这种情况下,设计良好的异常体系就体现出了它的价值。此时我们只需要catch它们共同的直接父类而不必catch每一个子类并复制同样的异常处理代码。

二、有人认为一个异常被设计出来而不被throw和catch是没有任何意义的。但是做为良好设计的产物,我们确实会在一些优秀的产品和框架中发现一些异常类,它们的主要作用就是用来被继承。或者更加确切地说是对异常进行“划分”。这种异常多是抽象类。就以经典的spring数据访问异常体系为例,作为处于异常体系中间层的org.springframework.dao.NonTransientDataAccessException,既非最高基类异常,同时又有众多的直接子类。从spring的源码中我们几乎找不到throw(org.springframework.dao.NonTransientDataAccessException是抽象类,因此不会有直接throw该异常的地方)和catch这个异常的代码。它的存在完全是与和它比肩的org.springframework.dao.TransientDataAccessException一起对异常做“范围划分“,在设计层面上体现合理的组织关系。像这种异常在众多产品和框架中大量存在。

很多系统都不会出现层次过深的异常体系,多数情况下,可能是一些继承了同一基类的简单异常。但这并不表示我们没有设计异常体系的必要。在我看来,一个用户登陆异常和一个payment异常是毫无瓜葛的。如果它们的直接父类是同一个,似乎很难说得过去。当然,话又说回来,不是可以,只是不够好罢了。


http://www.niftyadmin.cn/n/4223538.html

相关文章

nexus学习 二、nexus 说明

nexus 说明 component name的说明 maven-central:maven中央仓库,默认从https://repo1.maven.org/maven2/拉取jarmaven-releases:私库发行版jarmaven-snapshots:私库快照(调试版本)jarmaven-public&#x…

在C#中实现打印功能(C#中PrintDialog,PrintDocument的使用)实用的类

http://www.cnblogs.com/sunbin/archive/2010/06/02/1749663.html 在C#中使用PrintDialog可以很方便的实现程序的打印功能。 其步骤如下: 创建一个PrintDialog的实例。如下: System.Windows.Forms.PrintDialog PrintDialog1new PrintDialog ();创建一…

js BOM浏览器对象模型

BOM即Browser Object Model,浏览器对象模型,表示浏览器窗口,所有js全局对象、函数以及变量均是window 对象的成员。 对于不同的浏览器,表示宽度和高度的方法不同: 对于IE9及以上、Chrome、Firefox、Opera以及Safari&am…

nexus学习 三、web界面功能介绍

一、Browse Server Content 1.1 Search ​ 这个就是类似Maven仓库上的搜索功能,就是从私服上查找是否有哪些包。 注意: 在Search这级是支持模糊搜索的,如图所示: 如果进入具体的目录,好像不支持模糊搜索; 1.2 B…

山石4.0使用手册

https://wenku.baidu.com/view/7091ad270066f5335a812154.html转载于:https://www.cnblogs.com/xinghen1216/p/10297366.html

arcengine的编辑 捕获

arcengine的编辑 捕获 arcengine的编辑功能比较死,遇到特殊要求的时候不能满足客户的要求,可能需要重写编辑功能, arcengine的捕捉也不能单独应用,于是自己实现,如下,截图不是很好,鼠标形状没了…

maven的中国repository镜像

有段时间没用maven了&#xff0c;最近使用maven下载jar包时速度缓慢&#xff0c;最初以为是自己网速的问题&#xff0c;后来确定是访问maven的central repository端速度缓慢。在网上找到了一个maven repository的中国镜像&#xff0c;速度相当不错。特此收藏。 <repositori…

nexus学习 四、搭建本地yum源

Nexus搭建本地yum源 一、创建Blob 填写name之后&#xff0c;path会自动在对应的目录创建blob目录 二、创建Repositories&#xff08;仓库&#xff09; name&#xff1a;仓库名称Reoidate Depth&#xff1a;目录层即&#xff0c;一般2层即可Blob Store&#xff1a;关联Blob设备…