Posted on 2011-05-31 11:22
zuora 閱讀(93)
評論(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等有一些差異,特意將這些差異總結出來,為后續的朋友提供一點點個人經驗。