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)
| 归档时间: |
|
| 查看次数: |
11970 次 |
| 最近记录: |