3 回答
TA贡献1844条经验 获得超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条经验 获得超7个赞
许多人声称,已检查异常和未检查异常之间的战争已经结束。
未经检查的赢了!
因此,简单的答案是:在最低级别上用一个简单的Exception捕获来包围您的代码,将该异常放入(可能是专用的)RuntimeException并重新抛出该异常。
然后,在需要它的更高层上,捕获包装异常,访问其原因并进行适当处理。哪里:您在这里看到的几乎所有不同的已检查异常很可能类似于内部错误。因此,最初没有太多“不同的错误消息”。
TA贡献1817条经验 获得超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;
}
}
添加回答
举报