第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何處理應該有很多例外的情況?

如何處理應該有很多例外的情況?

富國滬深 2021-05-01 14:10:04
我不得不使用反射來實例化一組類。一切都很好,但是反射使用了許多異常,而我的方法看起來很丑陋。在這些情況下,良好做法有什么建議?應該拋出這些異常并將其捕獲到高級類中,以便能夠提供有關錯誤的明確信息,但是如果我要在所有涉及的方法和類中經(jīng)歷6或8個異常,則代碼將很糟糕,混亂而且非??植馈rivate Filter getFilterInstance(String path){    try {        return (Filter) Class.forName(path).getConstructor().newInstance();    } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {        Logger.getLogger(FiltersBuilder.class.getName()).log(Level.SEVERE, null, ex);        return null;    }}
查看完整描述

3 回答

?
婷婷同學_

TA貢獻1844條經(jīng)驗 獲得超8個贊

你可以抓住 ReflectiveOperationException

它是以下類型的超級類型:

  • ClassNotFoundException

  • IllegalAccessException

  • InstantiationException

  • InvocationTargetException

  • NoSuchFieldException

  • NoSuchMethodException

這意味著您只需要:

} catch (ReflectiveOperationException | SecurityException | IllegalArgumentException ex) {

    Logger.getLogger(FiltersBuilder.class.getName()).log(Level.SEVERE, null, ex);

    return null;

}

由于SecurityException&IllegalArgumentException實際上是運行時異常,因此您可以:


} catch (ReflectiveOperationException ex) {

    Logger.getLogger(FiltersBuilder.class.getName()).log(Level.SEVERE, null, ex);

    return null;

}

如果您可以RuntimeException向來電者傳播。


查看完整回答
反對 回復 2021-05-12
?
aluckdog

TA貢獻1847條經(jīng)驗 獲得超7個贊

許多人聲稱,已檢查異常和未檢查異常之間的戰(zhàn)爭已經(jīng)結束。

未經(jīng)檢查的贏了!

因此,簡單的答案是:在最低級別上用一個簡單的Exception捕獲來包圍您的代碼,將該異常放入(可能是專用的)RuntimeException并重新拋出該異常。

然后,在需要它的更高層上,捕獲包裝異常,訪問其原因并進行適當處理。哪里:您在這里看到的幾乎所有不同的已檢查異常很可能類似于內部錯誤。因此,最初沒有太多“不同的錯誤消息”。



查看完整回答
反對 回復 2021-05-12
?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

如果每種異常類型都需要不同的處理邏輯,請使用單獨的catch塊。


如果它們中的幾個需要相同的處理邏輯,則在同一塊中捕獲那些邏輯。


如果所有可能的異常都需要相同的處理邏輯,請捕獲基本的Exception類型。這看起來像是代碼的正確解決方案,因為無論它們是哪種類型,您都將它們傳遞到記錄器中。


private Filter getFilterInstance(String path){

    try {

        return (Filter) Class.forName(path).getConstructor().newInstance();

    } catch (Exception ex) {

        Logger.getLogger(FiltersBuilder.class.getName()).log(Level.SEVERE, null, ex);

        return null;

    }

}


查看完整回答
反對 回復 2021-05-12
  • 3 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號