欢迎来到天天文库
浏览记录
ID:32977525
大小:58.27 KB
页数:6页
时间:2019-02-18
《改进异常处理的6条建议-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、改进异常处理的6条建议-Java开发Java经验技巧改进异常处理的6条建议木文由ImportNew・唐尤华翻译自northconcepts0欢迎加入翻译小组。转载请见文末要求。合理地使用异常处理可以帮你节省数小时(甚至数天)调试时间。一个乘法异常会毁掉你的晚餐乃至周末计划。如杲处置不及时,甚至对你的名誉都会造成影响。一个清晰的异常处理策略可以助你节省诊断、重现和问题纠正时间。下而是6条异常处理建议。1.使用一个系统全局异常类不必为每种异常类型建立单独的类,一个就够了。确保这个异常类继承RuntimeException,这样可以减少类个数
2、并月.移除不必要的异常声明。我知道你正在想什么「如果类型只有一个,那么怎么能知道异常具体是什么?我将如何追踪具体的属性?请继续阅读。2・使用枚举错误码我们大多被教授的方法是将异常转为错误信息。这次查看H志文件时很好,(呃)但是这样也有缺点:1.错谋信息不会被翻译(除非你是Google)2.错误信息不会转换为用八友好的文字3.错误信息不能用编程的方式检测将异常消息留给开发者定义也会出现同样的错误有多种不同的描述。一个更好的办法是使用枚举表示异常类型。为每个错误分类创建一个枚举(付款、认证等),让枚举实现ErrorCode接口并作为异常的一
3、个属性。当抛出异常时,只耍传入合适的枚举就可以了。thrownewSystemException(PaymentCode.CREDITCARDEXPIRED);现在如杲需要测试异常只要比较异常代码和枚举就可以了。}catch(SystemExceptione){if(e.getErrorCode()二二PaymentCode.CREDIT_CARD_EXPIRED){•••}}通过将错误码作为查找资源的key就可以方便地提供友好的国际化文本。publicclassSystemExceptionExample3{publicstaticv
4、oidmain(String[]args){System,out.printin(getUserText(VaiidationCode.VALUE_TOO_SHORT));}——publicstaticStringgetUserText(ErrorCodeerrorCode){if(errorCode二二null){returnnull;}Stringkey二errorCode.getClass().getSimpleName()+〃_〃+errorCode;RcsourceBundiebundie二RcsourccBundie.gct
5、Bundie("com.northconeepts.cxccption.example,cxccpti〃ons);returnbundle.getString(key);3.为枚举添加错误值在很多吋候可以为异常添加错误值,比如HTTP返回值。这种情况下,可以在ErrorCode接口添加一个getNumber方法并在每个枚举中实现这个方法。publicenumPaymentCodeimplcmentsErrorCode{SERV1CE_T1MEOUT(1O1),CREDIT_CARD_EXPIRED(102),AM0UNT_T00_HI
6、GH(103),INSUFFICIENT_FUNDS(104);privatefinalintnumber;privatePaymentCode(intnumber){this.number=number;}©OverridepublicintgetNumber(){returnnumber;添加错误码可以是全局数值也可以每个枚举自己负责。你可以宜接使用枚举里的ordinal()方法或者从文件或数据库加载。4.为异常添加动态属性好的异常处理述应该记录相关数据而不仅仅是堆栈信息,这样可以在诊断错误和重现错误时节省大量时间。用户不会在你的应
7、用停止工作时告诉你他们到底做了什么。最简单的办法是给异常添加一个java.util.Map字段。新字段的职责就是通过名字保存相关数据。通过添加setter方法可以遵循流式接口。可以像下而示例这样添加相关数据并抛出异常:thrownewSystemException(ValidationCode.VALUETOOSHORT).set(〃field〃,field).set(〃value〃,value)・set("min-length",MINJLENGTII);3.避免不必要的嵌套冗长的堆栈信息不会有任何帮助,更糟糕的是会浪费你的吋间和资源
8、。重新抛出异常时调用静态函数而不是异常构造函数。封装的静态函数决定什么时候嵌套异常什么时候只要返回原來的实例。publicstaticSystemExceptionwrap(Throwableexcepti
此文档下载收益归作者所有