我有一个类,其创建的唯一目的是为系统 x 处理通知。 现在当我在系统x中执行操作时,可能会产生n个异常。我创建 我的通知类中的 ArrayList 用来存储所有这些异常。我稍后想迭代一下 列表来检查各种类型的异常。例如。我想迭代一下,看看是否有异常 发生sqlConnection,然后发生下一个异常,可能是SQL查询,依此类推。
如何实现这一目标?想法是这样的:
if exception for sqlconnection was found
exceptionMessage += "Connection Failed";
if exception for whatever was found
exceptionMessage += "whatever exception"
etc...
谢谢
最佳答案
我可以想出很多方法来做到这一点:
1) 可以使用instanceof
区分不同类型的异常;例如
if (e instanceof Exception) {
if (e instanceof IOException) {
if (e instanceof FileNotFoundException) {
...
} else ...
} else ...
} else ...
2)你可以使用 map 来区分;例如
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 主义)中,您可以抛出异常并使用 try {} catch
来区分它.
Throwable ex = ...
try {
throw ex;
} catch (IOException | InvalidArgumentException e) {
...
} catch (NullPointerException e) {
...
} catch (Throwable e) {
// catch all
}
(最后一个选项可以说是“使用异常来实现正常控制流”......但我相信它应该具有与其他选项相当的性能。使用异常的大部分成本是在创建异常时产生的实例,但我们没有这样做。我们正在重新抛出之前创建的异常。)
关于java 数组列表迭代异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360919/