我無法在Java中發現任何有關一些清理操作的建議,這些清理操作本身可能會引發異常。在Java中使用清理操作編寫catch塊
典型的例子是stream.close()
,我們通常在finally
子句中調用它,如果拋出異常,我們可以通過在try-catch塊中調用它或者聲明它被重新拋出來忽略它。
但在一般情況下,我怎麼處理這樣的情況:
public void doIt() throws ApiException { //ApiException is my "higher level" exception
try {
doLower();
} catch(Exception le) {
doCleanup(); //this throws exception too which I can't communicate to caller
throw new ApiException(le);
}
}
我可以這樣做:
catch(Exception le) {
try {
doCleanup();
} catch(Exception le1) {
//ignore?
//log?
}
throw new ApiException(le); //I must throw le
}
但這意味着我將不得不做一些日誌分析理解爲什麼清理失敗。
如果我這樣做:
catch(Exception le) {
try {
doCleanup();
} catch(Exception le1) {
throw new ApiException(le1);
}
它導致失去這讓我在這裏的拳頭地方catch塊le
。
人們在這裏使用的一些成語是什麼?
- 在throws子句中聲明較低級別的異常?
- 忽略清理操作中的異常?
我不確定。首先,有兩個異常來源,因此我不確定最終放置的位置,其次,我猜你的意思是Throwable上的setStackTrace()方法。我們沒有接受堆棧跟蹤的Exception構造函數。 – 2010-05-08 02:28:40