亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用現有的 try/catch 塊或重復的 catch 塊而不引發異常

使用現有的 try/catch 塊或重復的 catch 塊而不引發異常

慕容森 2023-09-06 15:40:38
考慮以下 try/catch 塊:try {    throwCheckedException();} catch (IOException e) {    doStuffWithException(e);}在上面的塊中,throwCheckedException有機會拋出已檢查的異常,因此我需要一個調用doStuffWithException. 但是,假設我想在此塊中添加一條附加語句:if (!someBoolean) {    throw new IOException("someBoolean must be true, got false.");}我應該利用 catch 塊并將上述代碼插入到 try 塊中,還是復制 catch 塊中的內容(如下所示)是更好的做法?try {    throwCheckedException();    if (!someBoolean) {        doStuffWithException(            new IOException("someBoolean must be true, got false.")        );    }} catch (IOException e) {    doStuffWithException(e);}
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

拋出異常是昂貴的操作。因此,如果您考慮兩種選擇 - 投擲和不投擲,那么不投擲是更好的方法。


然而,使用異常作為doStuffWithExceptionin的輸入參數try-block,感覺代碼很小。因此,我建議重構異常處理邏輯,使其不依賴異常作為輸入參數。


如果您根據異常中的某些數據來處理異常情況 - 提取該數據并傳遞給handle方法?;旧?,不要將異常用作 DTO 或 POJO(因為異常不是用于此目的)。


總結一下,我建議使用類似以下片段的內容:


try {

    throwCheckedException();

    if (!someBoolean) {

        Data data = createData();

        handle(data);

    }

} catch (IOException e) {

    Data data = createDataFromMessage(e.getMessage());

    handle(data);

}

或者,減少內部嵌套try-block:


try {

    throwCheckedException();

} catch (IOException e) {

    Data data = createDataFromMessage(e.getMessage());

    handle(data);

}


if (!someBoolean) {

    Data data = createData();

    handle(data);

}


查看完整回答
反對 回復 2023-09-06
  • 1 回答
  • 0 關注
  • 92 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號