gpt4 book ai didi

java - 在 Java 中抛出一个异常链表

转载 作者:太空狗 更新时间:2023-10-29 22:39:17 25 4
gpt4 key购买 nike

我有一个函数在执行可能引发异常的操作时循环。看起来像这样:

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

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

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

有人见过这样的吗?任何人都可以想到这样做有什么潜在的问题吗?谁能想到其他更好的方法来处理根本问题:需要传递多个不相关的异常而不退出函数直到完成?

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

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;
}

最佳答案

我最初的想法(除了我没有看到这个)是一个异常可能是一个相当大的对象(包含堆栈跟踪)并且我更希望存储很多它们.

我会在异常发生时构建一个错误参数/实参的列表,并在循环完成后抛出一个用该列表填充的自定义异常(如果该列表有超过 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);
}
}

关于java - 在 Java 中抛出一个异常链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2203030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com