gpt4 book ai didi

java - 具有多个内部异常并使用流的异常

转载 作者:行者123 更新时间:2023-12-02 11:31:28 25 4
gpt4 key购买 nike

如何处理要报告多个问题的文件上的多异常异常。

我有一个多处理步骤的情况,其中可能会发生不同的异常(例如,它们稍后将变为异步)。我正在使用(可能是快速失败的反模式)异常列表,然后一旦它们完成并检查异常

我有自己的自定义异常类别(对于每个异步任务)(扩展Exception类),但实现一个接口(interface)以包含附加信息,例如特定于消息的键值对

示例实现

List<Files> Folder;
//Now processed into below folders
List<Files> EnglishFolder;
List<Files> KoreanFolder;
List<Files> SpanishFolder;

//Now each task accumulates own exceptions.

EnglishException extends Exception implements InfoMapping
{
private EnumMap<CUSTOMENUM,STRING> info;
EnglishException(String message){super(message);}
EnglishException(String message, Exception why){super(message);}
public void addInfo(CUSTOMENUM key,String value){info.add(key,value}
}

我的问题是,如果我知道我在每个任务中创建这些异常对象的问题是什么,但我不抛出它们。但如果存在一般异常,我只是捕获它们并将其添加为

List<EnglishException> englishErrors;
//blah blah
englishErrors.add(new EnglishException("I found this error"));
//if generic exception in catch
englishErrors.add(new EnglishException("Unknown English error",e));
//returns without throwing exception

现在我需要同步所有任务

将所有异常整齐地打包到一个 XML 文件中

所以我需要支持1个异常类,该类支持异常类列表,只有这个Exception(String message, Throwable Cause)仅支持单个内部异常。

2 个问题:

  1. 我应该实现另一个接口(interface)并有一个特殊的异常(exception)吗实现该类并覆盖innerException 为列表的类?或者我在java中缺少支持多内部异常的东西吗?或任何还有其他合理的做法吗?
  2. 作为流的新手,我可以使上述逻辑更加可读/简单吗?(我对java 8非常天真,只是阅读所以如果没有请原谅我有任何意义)。不寻求答案,可能只是指向其中的内容寻找流来实现这一点。

    Streams.Of(englishExceptionList,spanishExceptionList)

    .reduce(parentException)

    .ifAny(抛出parentException)

最佳答案

您可以使用Throwable.addSuppressed(Throwable)它允许记录任意数量的可抛出项(并随后通过 getSuppressed() 检索),并且在语义上也比将其他可抛出项记录为“原因”更合适。

由于这是对其中一个可抛出项的一种修改,因此 reduce 不是正确的操作(并且它不会在并行操作中提供预期结果)。

这看起来不像是需要对大量元素进行优化的操作,因此,最好的解决方案是直接将所有元素收集到 List 中并使用

if(!listOfAllExceptions.isEmpty()) {
Throwable t = listOfAllExceptions.get(0);
listOfAllExceptions.subList(1, listOfAllExceptions.size()).forEach(t::addSuppressed);
throw t;
}

t的类型需要调整为未经检查或声明的异常

关于java - 具有多个内部异常并使用流的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49270547/

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