簡體   English   中英

“Rethrow”到下一個捕獲條款

[英]“Rethrow” to next catch clause

如果有一個帶有多個catch-blocks的try-catch,是否有辦法重新拋出下一個(不是底層)catch-clause的異常?

例:

try {

  // some exception can occur here

} catch (MyException ex) {

  // do something specific

  // rethrow ex to next catch

} catch (Exception ex) {

  // do logging stuff and other things to clean everything up
}

當拋出MyException ,我想處理該異常的特定內容,但后來我想處理異常( catch (Exception ex) )。

我不想使用finally-block和Java 7 Multi-catch也沒有幫助。

任何想法如何處理這個,我想避免每個catch塊中的冗余東西。 是否更好地僅捕獲Exception ,然后使用instanceof作為我的特定內容?

謝謝。

public void doStuff()
{
   try
   {

     // some exception can occur here

   } catch (MyException ex){

     // do something specific

     cleanupAfterException(ex);

   } catch (Exception ex) {

     cleanupAfterException(ex);
   }
}

private void cleanupAfterException(Exception ex)
{
   //Do your thing!
}

我認為這樣的事情會做什么?

您可能想嘗試這樣的事情:

try
{

}
catch(Exception ex)
{
    if(ex instanceof MyException)
    {
        // Do your specific stuff.
    }
    // Handle your normal stuff.
}

你可以嵌套你的try語句:

try {
  try {

    // some exception can occur here

  } catch (MyException ex) {

    // do something specific

    // rethrow ex to next catch

  }
}  catch (Exception ex) {

  // do logging stuff and other things to clean everything up
}

雖然我擔心這就是你說“ (不是底層) ”的意思嗎?

您可以嘗試多次嘗試捕獲:

try {

} catch(MyException ex) {
    try {

    } catch(Exception ex) {

    }
}

當然這是什么功能?

try {
    doStuff();
} catch ( MyException e ) {
    doMyExceptionStuff();
    doGeneralExceptionStuff();
    throw e;
} catch ( Exception e ) {
    doGeneralExceptionStuff();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM