2011-04-18 65 views
1

我一直在嘗試捕獲Salesforce自定義頂點類中的異常,但似乎不起作用。頂級類構造函數中的異常

在這種情況下,我有一個初始化環境的控制器構造函數,我試圖在構造函數中捕獲異常,但不起作用,異常沒有捕獲。

public MyController(){ 
    try{ 
    this.myVar = ApexPages.currentPage().getParameters().get('myParam'); 
    .... 

    } 
    catch(System.StringException se){ 
    .. 
    } 
    catch(System.NullPointerException ne){ 
    .. 
    } 
    catch(Exception e){ 
    .. 
    } 
    .... 
} 

回答

0

沒有什麼可以在這裏釣

currentPage()不爲空,如果內部控制器/擴展

getParameters()不爲空,即使參數列表爲空

get('myParam')可能會或可能不會返回null,但不管該值是否存儲在myVar中

只有當您遲到時r嘗試引用myVar的實例成員,你會得到System.NullPointerException,甚至在數據庫中存儲null myVar是有效的。

+0

在我的情況下,myVar是Id類型的,所以如果有人想改變url中的id,它會拋出異常,也是在這個myVar之後有初始化代碼可能會拋出其他異常,但即使我使用Exception它們不會被捕獲 – Timby 2011-04-20 12:44:29

+0

myVar可以爲null的唯一方法是如果myParam完全從URL中丟失。你應該檢查使用if語句。使用NULL作爲ID是有效的,直到您試圖將它存儲在非空字段中(引發DML異常),或者嘗試引用ID實例方法之一(引發NPE)。沒有NPE,其他一切都會順利進行。 – mmix 2011-04-20 15:17:58

1

同意@mmix。

以下操作永遠不會導致任何異常。

ApexPages.currentPage().getParameters().get('myParam'); 

事實上捕NPE(空指針異常)是不好的做法,因爲這些是運行時異常和應該檢查是否有變!= null或變量== NULL,而不是依賴於NPE例外。如果你使用try catch塊,代碼流將難以維護和理解。