2012-06-12 41 views
0

我開發了一個框架,允許其他人插入不同的優化器實現。這些優化器是異步運行的,我已經在異步代碼之前和之後附加了偵聽器,以監視優化器的執行情況。例如:在第三方代碼中捕獲運行時異常

public void async(Optimizer o){ 
    runListeners(o); 
    o.run(); 
    runListeners(o); 
} 

我的問題是一些懶惰程序員投擲一些NullPointerExceptions其代碼內並防止該方法從執行偵聽器的第二次。我想過要趕上RuntimeException,但這對我來說感覺不對。

+0

如果你想抓住所有,只需要捕獲所有'Throwable'或者至少'Exception'。在你的程序的最高/調度/運行級別沒有錯。 –

+0

我正在嘗試不導致JVM行爲不端。就好像有一個OutOfHeapspace或其他一些非常糟糕的錯誤。 – babsher

回答

1

您創建的插件框架來運行,你必須考慮如何處理插件拋出的異常,因爲你通常不希望一個頑劣插件崩潰您的整個程序的任何時間。在這裏捕獲Exception,RuntimeException或甚至Throwable沒有任何問題(儘管錯誤可能仍然是中止的原因)。

+0

捕捉throwable有什麼不妥嗎? – babsher

+1

@ user673289:這是一個判斷呼叫。對我來說,這取決於我是否想嘗試從拋出Error的東西中恢復。也許選擇你可以處理的東西。 –

0
runListeners(o); 
try { 
    o.run(); 
} finally { 
    runListeners(o); // this will get run even if you get NPE 
    // now your program crashes with the NPE :) 
}