Posted on 2011-05-31 11:22 
zuora 阅读(97) 
评论(0)  编辑  收藏  
			 
			
		 
		在Force.com
开发过程中,我们会定义自己的异常,然后,在可能发生异常的地方,抛出自定义的异常。基于Java等语言的开发经验,我们经常会定义一个异常,假设这个异常会包括异常编码及异常信息等等。
定义伪码:
global class CustomException extends 
Exception {
    // 异常编码
global final String code{get; private set;}
// 异常信息
global final String message{get; private set;}
 
// 构造方法
    public CustomException(String code, 
String message) {
        this.code = code;
        this.message = 
message;
    }
}
 
使用伪码:
 try{ 
     // … 
 }catch(Exception ex){
 
  // 拦截所有异常,然后,封装成自定义的异常抛出 
 throw new CustomException(“1001”, “I am tony.”);
 
 } | 
 
 
 
 
 
 
运行结果:
 当打印Exception的Message时,并不是构造异常时的“I am tony.”。参见如下截图:

 
 经过Debug代码,发现打印的Message实际是其父类的Message信息,也就是说Apex打印异常时,默认会引用其父类的Message成员,并不是自定义Exception的Message,因此,如果希望打印自己的Message,需要在构造自定义异常时,重置其父类Message成员。
 
调整伪码:
 global class CustomException extends
 Exception {
 
 // 异常编码 
 global final String code{get; private set;}
 
   
 // 构造方法 
 public CustomException(String code, String message)
 {
 
  this.code = code;
 
 // 重置父Message 
  this.setMessage(message); 
 } 
 } | 
 
 
 
 
 
 
 
 
 
 
 
再次运行:
 结果会按预期的Message进行打印,即“I am tony.”。
 

 
在Force.com开发过程中,发现Exception定义上与Java等有一些差异,特意将这些差异总结出来,为后续的朋友提供一点点个人经验。