我有一个专门用于系统x的hadnling通知的类。 现在,当在系统x中执行操作时,可以生成n个异常。我建立 我的通知类中的ArrayList用于存储所有这些异常。我后来想重复一遍 列表以检查各种类型的异常。例如。我想迭代,看看是否异常 发生了sqlConnection,然后是下一个可能是SQL查询的异常,依此类推。
如何实现这一目标?这个想法是这样的:
if exception for sqlconnection was found
exceptionMessage += "Connection Failed";
if exception for whatever was found
exceptionMessage += "whatever exception"
etc...
谢谢,
答案 0 :(得分:2)
我可以想到很多方法:
1)您可以使用instanceof
区分不同类型的异常; e.g。
if (e instanceof Exception) {
if (e instanceof IOException) {
if (e instanceof FileNotFoundException) {
...
} else ...
} else ...
} else ...
2)您可以使用地图进行区分; e.g。
Map <Class, Integer> map = new HashMap<Class, Integer>();
map.put(FileNotFoundException.class, 1);
map.put(NullPointerException.class, 2);
...
Integer action = map.get(ex.getClass());
if (action != null) {
switch(action) {
case 1:
....
case 2:
...
}
}
3)在Java 7中,您可以通过启用异常类的名称进行区分。
4)在Java 7中(或者更早的Java版本......虽然'|'是Java 7-ism),但您可以抛出异常并使用try {} catch
来区分它。
Throwable ex = ...
try {
throw ex;
} catch (IOException | InvalidArgumentException e) {
...
} catch (NullPointerException e) {
...
} catch (Throwable e) {
// catch all
}
(最后一个选项可以说是“使用正常控制流程的例外”......但我认为它应该具有与其他选项相当的性能。使用异常的大部分成本是在创建异常时产生的实例,我们没有这样做。我们正在重新抛出之前创建的异常。)