在Java中抛出一个链接的例外列表

Dan*_*ham 17 java exception-handling

我有一个函数循环,同时做一些可能抛出异常的东西.看起来像这样:

public void myFunction() throws MyException {
    while(stuff) {
        try {
            DoSomething() // throws an exception
        }
        catch (Exception ex) {
            throw new MyException(some, stuff, of, mine, ex);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

导致异常的错误是可恢复的.它可能类似于单个更新语句中的SQL错误,其中while循环执行一系列更新语句.或者单个数据中的解析错误,其中循环处理多个数据.我需要在链中进一步传递异常,以便程序的GUI部分可以处理它,处理它并将错误传递给用户.但我不想在这个特定的函数中杀死循环.它正在做的其他事情可能并非无效.导致异常的错误可能对函数不致命.

所以我的问题是: 构建自定义异常的链接列表(其中每个异常是一个节点,抛出的异常是列表的头部)然后抛出列表的头部(如果有的话)是一种可接受的做法循环完成?

有没有人见过这样的事?有人能想到这样做的任何潜在问题吗?任何人都可以想到其他更好的方法来处理根问题:需要在退出函数之前传递多个不相关的异常,直到它完成为止?

这是一个如何非常简单地实现链接和throw的示例:

public void myFunction() throws MyException {
    MyException head = null;
    while(stuff) {
        try {
            DoSomething() // throws an exception
        }
        catch (Exception ex) {
            MyException tmp = new MyException(some, stuff, of, mine, ex);
            tmp.next(head);
            head = tmp;
        }
    }
    if(head != null)
       throw head;
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 16

我的初步想法(除了我没有看到这个)是一个异常可能是一个相当大的对象(包含堆栈跟踪),我宁愿存储很多.

我会在异常发生时构建一个错误的参数/参数列表,并在完成循环后,抛出一个填充此列表的自定义异常(如果列表包含多于0个元素).这似乎是处理这种情况的一种更易于管理的方式.

public void myFunction() throws CustomException {
    List<MyError> errors = new ArrayList<MyError>();
    while(stuff) {
        try {
            DoSomething() // throws an exception
        }
        catch (Exception ex) {
            errors.add(new MyError(some, stuff, of, mine, ex));
        }
    }
    if (errors.size() > 0) {
       throw new CustomException(errors);
    }
}
Run Code Online (Sandbox Code Playgroud)