`
mabusyao
  • 浏览: 253303 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

一种简单并且统一的处理异常的办法

阅读更多
之前做的一个项目中,有一些对异常处理的封装,如果抛出的异常是项目特定的异常,则直接抛出。如果不是,则进行一个封装。

现在的做法是这样的:
catch (InputValidationFault ive) {
	throw new InputValidationFault(ive.getMessage(), "");
} catch (InputLimitFault ile) {
	throw new InputLimitFault(ile.getMessage(), "");
} catch (SystemUnavailableFault suf) {
	throw new SystemUnavailableFault(suf.getMessage(), "");
} catch (Exception e) {
	throw new SystemUnavailableFault(e.getMessage(), "");
}

整个项目中掺杂了大量类似的代码,因为需要确保项目特定的异常不会被转化成System Unavailable Fault,因此不得不在之前首先把它们都catch住并重新抛出去。

这里有点奇怪的,为什么要重新new一个异常抛出呢? 应该是该开发人员对于Java技术的不熟练,以至于写出这样的代码。 其实可以改良成这样一个版本:
catch (InputValidationFault ive) {
	throw ive;
}


这样对项目中的senior developer造成了很大的负担,需要不时的review其他人的代码,确保没有错误。

一直在想是否能够对这段代码进行封装,会减少很多犯错的机会,也减轻开发人员的负担。

今天看Tomcat源码,发现了一个不错的做法,将之前的代码稍微改了下,应该可以解决这个问题:
catch (Throwable t) {
	handleThrowable(t);
}

...

    public static void handleThrowable(Throwable t) throws InputValidationFault,
InputLimitFault, SystemUnavailableFault{
        if (t instanceof InputValidationFault) {
            throw (InputValidationFault) t;
        } else if (t instanceof InputLimitFault) {
            throw (InputLimitFault) t;
        } else if (t instanceof SystemUnavailableFault) {
            throw (SystemUnavailableFault) t;
        } else {
            throw new SystemUnavailableFault(t.getMessage(), "");
        }
    }
分享到:
评论

相关推荐

    计算机系统结构试题集

    C.LRU既反映了历史性,又反映了程序访问的局部性,命中率较接近OPT,是实际应用最广泛的一种替换算法。 D.OPT是最优替换算法,是实际应用最广泛的一种替换算法。 26、在页面替换中,如果选择近期最少访问的页面作为...

    Python 2.5

    <br/> <br/>Python是一种即译式的,互动的,面向对象的编程语言,它包含了模组式的操作,异常处理,动态资料形态,十分高层次的动态资料结构,以及类别的使用。Python揉合了简单的语法和强大的功能。它的...

    OpenJPA 2.2.1 API (CHM格式)

    保持数据库和对象视图的一致性是非常重要的工作,OpenJPA 支持三种模式处理数据库和对象视图的一致性:正向映射(Forward Mapping)、反向映射(Reverse Mapping)、中间匹配(Meet-in-the-Middle Mapping),并且为...

    asp在线考试系统(asp+access实现)

    以前的数据库管理系统为上述各类操作提供单独的语言,而SQL将全部任务统一在一种语言中。 3.是所有关系数据库的公共语言 由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一...

    DWR.xml配置文件说明书(含源码)

    一种情况是因为DWR1.0的解析器中有个Bug,在有些场合会无法处理返回值的类型.所以应该要避免这种情况的发生. 一种情况是因为解析器是一个语法宽松的解析器,他不象编译器一样对语法有非常严格的要求,所有有时可能一些...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    虽然oSIP的开发人员也说明了,oSIP只使用了标准C开发库,但许多人在Windows下使用oSIP时,第一步就被卡住了,得不到oSIP的LIB库和DLL库,也就没有办法将oSIP使用到自己的程序中...

    Sybase Adaptive Server™ Enterprise ODBC驱动程序安装指南

    ODBC(Open Database Connectivity)是一种开放标准的应用程序接口(API),用于在应用程序和不同的数据库管理系统之间进行交互。通过 ODBC 驱动程序,开发者可以编写一次性的应用程序代码来访问任何支持 ODBC 的...

    华为编程开发规范与案例

    对于交换机来说,任何一种业务都要分别在模拟话机、ISDN话机、V5话机、多种形式的话务台上做测试。对于中继的业务,则要充分考虑各种信令:TUP、ISUP、PRA、NO1、V5等等。 【案例1.2.2】 对某交换类进行计费测试,...

    简单桥牌——easybrige

    我们的目标在于确立一种简单的标准体系,它可以使任何有经验的牌手之间不用商讨便可采用,而且,用起来十分简明,各种叫牌只赋予一确定的含意,不得有其它解释(例如:对1NT开叫,应叫2H是转移,不得用以表示红心...

    学习C++的一些基本问题

    面向对象的程序设计(Object-Oriented Programming, OOP)是一种编程范式,其核心思想是将数据和对数据的操作封装在一起,形成一个整体——对象。这种封装有助于隐藏对象内部的具体实现细节,使得对象之间的交互变得...

    04747Java复习资料.doc

    - **解析:** 实现多线程的一种常见方法是让一个类实现`Runnable`接口并重写`run()`方法,然后创建`Thread`对象并将`Runnable`实例传递给构造函数。最后,通过调用`Thread`对象的`start()`方法来启动线程。 ### 十...

    java面试题广州

    1. **冒泡排序**:冒泡排序是一种简单的排序算法,通过重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,直到没有再需要交换,算法结束。 2. **字符串反转算法**:字符串反转可以...

    二十三种设计模式【PDF版】

    之道 》,其中很多观点我看了很受启发,以前我也将"设计模式" 看成一个简单的解决方案,没有从一种高度来看待"设计模式"在软 件中地位,下面是我自己的一些想法: 建筑和软件某些地方是可以来比喻的 特别是中国传统建筑...

    jsp和servlet操作mysql中文乱码问题的解决办法

    - 另一种更为高效且系统的方法是创建一个过滤器SetCharacterEncodingFilter,并在web.xml中配置它。这个过滤器会自动将请求的字符编码设置为UTF-8,从而避免了每次手动设置编码的麻烦。以下是具体的实现步骤: - ...

    PerCM个人代码管理软件

    所以首先采用第一种思路。 这里就需要写percmserver,白手起家,如何开始?还是需要循序渐进,首先从最简单的开始。后期,可以将这个服务器设计成多用户的(那就是另一个话题),首先需要把网络的机制引入进来,并...

    ASP设计在线考试系统OnlineTest

    以前的数据库管理系统为上述各类操作提供单独的语言,而SQL将全部任务统一在一种语言中。 3.是所有关系数据库的公共语言 由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一...

    税务规划之增值税基础知识问答库.docx

    一般来说,代购行为被视为一种特殊的销售行为,需要按规定计税。 4. **关于企业所属机构间移送货物征收增值税的问题**:企业内部不同机构之间互相移送货物时,除非有特殊情况,否则一般视为内部调拨,不视为销售...

    自己动手写操作系统(含源代码).part2

    正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。 好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质,只有充分...

    自己动手写操作系统(含源代码).part1

    正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。 好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质,只有充分...

Global site tag (gtag.js) - Google Analytics