WEB开发网      婵犵數濞€濞佳囧磹婵犳艾鐤炬い鎰堕檮閸嬬喐銇勯弽銊с€掗梻鍕閺岋箑螣娓氼垱笑闂佽姘﹂褔婀佸┑鐘诧工妤犲憡绂嶉崜褏纾奸弶鍫涘妼缁楁岸鏌熷畡鐗堝殗闁诡喒鏅犲畷褰掝敃閵堝棙顔忔繝鐢靛仦閸ㄥ爼骞愰幘顔肩;闁规崘绉ぐ鎺撳亹闁绘垶锕╁Λ鍕⒑閹肩偛濡奸悗娑掓櫇缁顓兼径妯绘櫇闂佹寧绻傞弻濠囨晝閸屾稓鍘甸柣搴㈢⊕閿氶柣蹇ョ稻缁绘繃绻濋崘銊т紝闂佽鍨伴崯鏉戠暦閻旂⒈鏁傞柛鈾€鏅欑槐妯衡攽閻愬樊鍤熷┑顔藉劤铻為柛鏇ㄥ墯閸欏繘鏌嶉崫鍕櫣缂佲偓婢跺绠鹃柟瀛樼箘閿涘秵顨ラ悙顏勭伈闁诡喖缍婂畷鎯邦槻婵℃彃顭烽弻娑㈠Ω閵夈儺鍔夌紓浣稿€哥粔褰掑极閹剧粯鏅搁柨鐕傛嫹 ---闂傚倷鐒︾€笛兠洪埡鍛闁跨噦鎷�
开发学院软件开发Java 追求代码质量: 用 AOP 进行防御性编程 阅读

追求代码质量: 用 AOP 进行防御性编程

 2009-11-19 00:00:00 来源:WEB开发网 闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹闂傚倷绀侀幉锟犲垂閻㈠灚宕查柟鎵閸庡秵銇勯幒鎴濃偓鐢稿磻閹炬枼妲堟繛鍡楃С濞岊亞绱撻崒姘扁枌闁瑰嚖鎷�婵犵數濮幏鍐川椤撴繄鎹曢梻渚€娼уú銈吤洪妸鈺佺劦妞ゆ帊鑳堕埊鏇㈡煏閸モ晛浠х紒杈╁仱閺佹捇鏁撻敓锟�闂傚倷绶氬ḿ褍螞閹绢喖绠柨鐕傛嫹  闂傚倷鑳舵灙缂佺粯顨呴埢宥夊即閵忕姵鐎梺缁樺姈椤愮厧鈽夊Ο閿嬬€婚梺褰掑亰閸撴稑鈻斿鑸碘拺闁告稑饪村▓鏃€绻涚仦鍌氬闁崇粯鎹囬獮瀣攽閹邦剚顔傛俊鐐€栧濠氬储瑜忛幉鎾晸閿燂拷
核心提示: 测试我的理论很容易;甚至都不用从头开始,仅仅把 {null, null} 添加到初始 BuildHierarchyTest 的 dataValues 方法中的多维 Object 数组中,追求代码质量: 用 AOP 进行防御性编程(3),然后再次运行它,我定会得到如图 1 所示的 NullPoin

测试我的理论很容易;甚至都不用从头开始。仅仅把 {null, null} 添加到初始 BuildHierarchyTest 的 dataValues 方法中的多维 Object 数组中,然后再次运行它。我定会得到如图 1 所示的 NullPointerException:


图 1. 可怕的 NullPointerException
追求代码质量: 用 AOP 进行防御性编程

图片看不清楚?请点击这里查看原图(大图)。

关于静态分析

诸如 FindBugs 等静态分析工具通过将字节码和一系列 bug 模式相匹配来检验类或 JAR 文件从而寻找潜在问题。针对样例的代码运行 FindBugs 不会 揭示出清单 1 中找到的 NullPointerException。

防御性编程

一旦出现这个问题,下一步就是要拿出对抗的策略。问题是我控制不了这个方法能否接收这种输入。对于这类问题,开发人员通常会使用防御性编程技术,该技术专门用来在发生摧毁性后果前捕捉潜在错误。

对象验证是处理不确定性的一项经典的防御性编程策略。相应地,我会添加一项检验来验证 clzz 是否为 null,如清单 3 所示。如果其值最终为 null,我就会抛出一个 RuntimeException 来警告他人注意这个潜在问题。


清单 3. 添加验证 null 值的检验

public static Hierarchy buildHierarchy(Class clzz){ 
 
 if(clzz == null){ 
 throw new RuntimeException("Class parameter can not be null"); 
 } 
 
 Hierarchy hier = new Hierarchy(); 
 hier.setBaseClass(clzz); 
 
 Class superclass = clzz.getSuperclass(); 
 
 if(superclass != null && superclass.getName().equals("java.lang.Object")){ 
 return hier; 
 }else{    
 while((clzz.getSuperclass() != null) && 
  (!clzz.getSuperclass().getName().equals("java.lang.Object"))){ 
   clzz = clzz.getSuperclass(); 
   hier.addClass(clzz); 
 }     
 return hier; 
 } 
}   

上一页  1 2 3 4 5 6 7 8  下一页

Tags:追求 代码 质量

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接