Java,在一个类处理程序类中处理潜在的大量异常?

Java,在一个类处理程序类中处理潜在的大量异常?,java,exception,exception-handling,try-catch,throwable,Java,Exception,Exception Handling,Try Catch,Throwable,我正在从事一个Java项目,我遇到了一个有趣的设计问题。这并不完全是一个问题,但有了明显的解决方案,它就有点难看了 我有一个实现Callable的类,尽管在当前的实现中,它可以很容易地成为Runnable,因为我对结果不感兴趣,至少对调用线程不感兴趣。调用线程会将其中一些放入线程池。每个可调用项都有一批从外部服务获取的数据。可调用项将执行许多操作,其中许多操作涉及对外部服务进行进一步调用。因此,有很多地方可以抛出各种异常 我发现的问题是,根据异常发生的位置,我可能需要采取不同的操作。如果发生在点

我正在从事一个Java项目,我遇到了一个有趣的设计问题。这并不完全是一个问题,但有了明显的解决方案,它就有点难看了

我有一个实现Callable的类,尽管在当前的实现中,它可以很容易地成为Runnable,因为我对结果不感兴趣,至少对调用线程不感兴趣。调用线程会将其中一些放入线程池。每个可调用项都有一批从外部服务获取的数据。可调用项将执行许多操作,其中许多操作涉及对外部服务进行进一步调用。因此,有很多地方可以抛出各种异常

我发现的问题是,根据异常发生的位置,我可能需要采取不同的操作。如果发生在点A,则删除外部服务上的数据。如果发生在点B,请将数据移动到服务器上的其他位置。如果它发生在C点,只需记录它,不做任何进一步的操作,等等。任何数量的异常类型都可能在多个点抛出,尽管我认为我不需要对类型本身进行太多过滤,但是发生了更多的异常类型

Callable本身并不是非常庞大,所以没有太多的代码需要处理。然而,我很犹豫是否要用大量的try/catch块来处理可能需要不同处理的每个可能的点/异常。我意识到这可能是唯一可行的解决办法。如果不捕获现有的异常并重新引用自己的异常(这似乎有点多余),我真的无法控制将抛出的大多数异常(可能是少数)。我想知道是否有一个好的模式或方法来处理这类事情

我考虑过一个异常处理类,但我仍然需要以某种方式捕获每个异常,并将其传递给处理程序,因为抛出异常的点很重要。我可以将可调用函数分解为更多的原子类,每个类都有自己的小块和处理,但这将是一个又一个乱七八糟的交易。完全捕获call()方法中的所有内容,或者通过在调用线程中捕获将来的异常,这实际上不是一个选项,因为这将丢失有关异常发生位置的数据,除非我想解析堆栈跟踪,这是不可行的

有人能解释一下吗?也许我只是在为试一试/接球障碍争论不休,应该继续努力,但我觉得一定有更好的方法


嗯,我确实觉得方法上的注释在这里可能会有所帮助。我可以分解所有方法,直到每个方法中只有一个可能的异常抛出一段代码。使用自定义注释对每个方法进行注释,该注释指示在该方法引发异常时所做的操作。我不确定这是否可能(异常可能发生在每个数据段的循环中,因此需要立即捕获,并且只有一个数据段可能有问题,或者至少需要标记该数据段以便在链的后续处理),但这可能会减少对大量try/catch块的需求,而是使用一个注释和一个处理程序类来处理异常。我认为不可能通过注释以这种方式规定行为,但我很高兴在这一点上出错。

当然,您可以在每一点上只使用几个catch子句,只捕获适当的超类,然后在捕获它们之后对它们进行排序(可能是在普通例程中)。或者,您甚至可以捕获可丢弃的内容,将其分类,然后重新显示您不想处理的异常。甚至可以以某种方式驱动整个表,从而简化修改。我不认为有超过一小撮,在大多数情况下,扔哪一个并不重要。抛出它们的操作应该足够具体,这不是什么大问题。我认为一个设计可能会用一个对异常做出反应的对象来包装每个可调用对象。也就是说,您将通过中介运行任务,中介使用有关流程阶段的信息。但这就是我今晚所能读到的。好吧,尝试/捕获块需要和你的回答一样具体。由于我们对您的应用程序一无所知,因此无法更具体地说明。