当前位置: 首页 > 知识库问答 >
问题:

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

柯耀
2023-03-14

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

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

我有自己定制的异常类别(针对每个异步任务)(扩展异常类),但实现了一个接口,以包含消息特定的键值对等附加信息

示例实现

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个异常类,支持一个列表的异常类只有这个异常(字符串消息,可抛出的原因)只支持单个内部异常。

2个问题:

>

  • 我是否应该实现另一个接口,并使用一个特殊的异常类来实现该接口,并将innerException重写为list?还是我在java中缺少了支持多内部异常的东西?或者有其他的好的练习吗
  • 由于对streams还不熟悉,我能否让上面的逻辑更具可读性/更简单,比如(我对java 8非常幼稚,只是阅读而已,如果没有任何意义,请原谅我)。不寻求答案,可能只是指向在流中寻找什么来实现这一点的指针。

    流。Of(englishExceptionList,SpanishexExceptionList)

    。减少(父母例外)

    . ifany(抛出父母异常)

  • 共有1个答案

    徐昆
    2023-03-14

    您可以使用Throwable。addsupprested(Throwable)允许记录任意数量的Throwable(随后通过getsupprested()检索),而且在语义上也比将其他Throwable记录为“原因”更合适。

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

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

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

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

     类似资料:
    • Camel in Action的结尾是在时使用

    • 我必须将多个1页pdf合并为一个pdf。我使用iTextSHarp 5.5.5.0来实现这一点,但当我合并超过900-1000个pdf时,会出现内存不足异常。我注意到,即使我释放并关闭阅读器,内存也不会得到正确的清理(进程使用的内存量永远不会减少),所以我想知道我可能做错了什么。这是我的代码: 它从来没有开始写文件,我在p.Copy()过程中得到一个内存不足的异常。AddPage()部分。我甚至尝

    • 在我的应用程序的web.xml中,我有这样的配置: 有人能帮我吗?

    • 我是相当新的JNI善良,所以请告诉我,如果我是愚蠢的。 我试图将一个自定义异常从C扔到Java层,该层由字符串和整数构成。我无法让ThrowNew()工作,因为它只需要一个字符串参数。我能找到的每个自定义异常的例子都使用ThrowNew()!!Grrrrr 我猜我需要构造一个,并用“扔(jthrowable obj)”扔出去,但我不确定...这和“扔新()”一样吗?? 例如,这就是我需要的: 如果

    • 我正在尝试编写允许我做4件事的代码,我正在使用try和except。 代码如下: 但我还需要使用2个例外。你能给我解释一下我怎么做吗? 主要目标是下载一个文件;如果仍然没有,下载第二个文件,依此类推。

    • 我正在尝试为我的项目导入一些gradle依赖项。但是,特定包正在生成NoClassDefFound异常。如果我没有理解错的话,发生这种情况是因为包是在编译时找到的,而不是在运行时找到的。我在下面包含了我的分级构建以及生成的错误。我曾尝试手动将所需的jar添加到WAR库文件中,但没有成功。 我尝试手动将所需的jar添加到WAR库文件中,但没有成功。