【问题标题】:java exception arraylist iterationjava异常arraylist迭代
【发布时间】:2012-04-28 05:35:39
【问题描述】:

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

谢谢,

【问题讨论】:

  • 所以你想检查if (exception instanceof SQLException) handleSQLException(); if (exception instanceof IOException) handleIOException();之类的东西,但要以一种干净利落的方式

标签: java exception arraylist


【解决方案1】:

我可以想出很多方法来做到这一点:

1) 您可以使用instanceof 区分不同类型的异常;例如

if (e instanceof Exception) {
    if (e instanceof IOException) {
        if (e instanceof FileNotFoundException) {
            ...
        } else ...
    } else ...
} else ...

2) 您可以使用地图进行区分;例如

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
}

(最后一个选项可以说是“对正常控制流使用异常”......但我相信它应该具有与其他选项相当的性能。使用异常的大部分成本是在创建异常时产生的实例,但我们没有这样做。我们正在重新抛出之前创建的异常。)

【讨论】:

  • 我已经使用了第一种方法,它奏效了。当第一个回复使用 instanceof 时,我就这样做了。然后你回复确认我的想法是有效的。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2018-10-21
  • 2015-05-10
  • 2013-01-17
相关资源
最近更新 更多