java 数组列表迭代异常

标签 java exception arraylist

我有一个类,其创建的唯一目的是为系统 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/

相关文章:

java - 在 Servlet RequestDispatcher 中发送两个属性

java - 为什么这个 HashMap 被作为引用传递

java - ArrayList 打印重复值

exception - RISC-V 从带有压缩指令的异常处理程序返回

php OOP 异常或 die()?

java - 如何检查List是否按顺序包含多个元素

PHP 数组 : how to print only array values but not keys

java - Hibernate 5.2.17 不回滚失败的事务

java - RxJava 的 Observable.create 与 Observable.just(1).flatMap

java.lang.NoClassDefFoundError