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向來電者傳播。

TA貢獻1847條經(jīng)驗 獲得超7個贊
許多人聲稱,已檢查異常和未檢查異常之間的戰(zhàn)爭已經(jīng)結束。
未經(jīng)檢查的贏了!
因此,簡單的答案是:在最低級別上用一個簡單的Exception捕獲來包圍您的代碼,將該異常放入(可能是專用的)RuntimeException并重新拋出該異常。
然后,在需要它的更高層上,捕獲包裝異常,訪問其原因并進行適當處理。哪里:您在這里看到的幾乎所有不同的已檢查異常很可能類似于內部錯誤。因此,最初沒有太多“不同的錯誤消息”。

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;
}
}
添加回答
舉報