`
mabusyao
  • 浏览: 247790 次
  • 性别: 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(), "");
        }
    }
分享到:
评论

相关推荐

    会计理论考试题

    10.文字处理系统是一种 __C__ 。 A、系统软件 B、管理软件 C、应用软件 D、编辑程序 11.Visual Basic 5.0是一种 __C__ 。 A、自然语言 B、机器语言 C、汇编语言 D、高级语言 12.汇编语言是一种 ___C__ 。 A、机器...

    计算机系统结构试题集

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

    Python 2.5

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

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一 个gzip缓存servlet过滤器,支持REST和SOAP api等特点。MapDB: mapdb是一个内嵌的纯java的数据库,提供了并发的HashMap、TreeMap、Queue,可以基 于...

    OpenJPA 2.2.1 API (CHM格式)

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

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

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

    asp.net知识库

    .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 ...

    网络安全专业术语简介.docx

    统一管理,分布部署该文设计的企业网络安全管理系统是采用网络安全管理中心对系统进行部署和管理,并且根据网络管理人员提出的需求,将网络安全代理分布地布置在整个网络系统之中,然后将选取出的网络功能模块和网络...

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

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

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

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

    华为编程开发规范与案例

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

    简单桥牌——easybrige

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

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

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

    PerCM个人代码管理软件

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

    ASP设计在线考试系统OnlineTest

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

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

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

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

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

    计算机二级公共基础知识

    一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接等存储结构。 顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储...

    RFID数据流近似去重

    一个智能的RFID阅读器能够去除自身产生的冗余数据,但是多个阅读器产生的冗余数据紧靠本身自包含的处理能力去除是不可能的,因此我们提出了一种基于中间件的处理冗余数据的技术。 上面这张图表示:有两个阅读器...

    x-scan-v3.3-cn

    这一问题的解决办法也要分情况讨论,一般说来第一种情况比较容易解决,直接升级漏洞扫描器就可以了,对于第二种情况需要使用者对网络比较熟悉,有能力的话可以自己编写一个漏洞扫描器,自己编写的扫描器可以针对返回...

Global site tag (gtag.js) - Google Analytics