我有一个处理数百万数据的脚本。相同的数据已损坏,因此我使用的框架失败并引发异常。我依赖于一个我无法更改/更新的框架。我已经按原样使用它了。每次我使用这个框架的功能时我都会使用try/catch。因此,我使用了大量的 try/catch 块,导致代码变得不可读,我想摆脱 try/catch 并与我的代码分开处理异常。
我希望有一个全局异常处理程序,因此每当框架抛出异常时,它都应该捕获并记录,并且处理数据的循环应该继续。像 spring 和 jersey 这样的 Web 框架有一个全局异常处理程序。我希望脚本有类似的行为。
我尝试了 Thread.UncaughtExceptionHandler 但 UncaughtExceptionHandler 的默认行为是在发生异常时停止进程,因此它不起作用。
目前我的代码如下所示。我想摆脱 try/catch 块。
public static void main(String[] args) throws FrameworkException {
List<Element> elements = new ArrayList<>(); //Millons of data
processItems(elements)
}
public void processItems(List<Element> items) throws FrameworkException{
for (int i = 0; i < elements.size(); i++) {
try{
framework.doSomething(elements.get(i));
}
catch(FrameworkException e){
// handle
}
// . . .
try{
framework.doDifferentThing(elements.get(i));
}
catch(FrameworkException e){
// handle
}
// . . .
}
System.out.println("Processing completed.");
}
我梦想的代码和异常是在全局处理的。
public void processItems(List<Element> items) throws FrameworkException{
for (int i = 0; i < elements.size(); i++) {
framework.doSomething(elements.get(i));
// . . .
framework.doDifferentThing(elements.get(i));
// . . .
}
System.out.println("Processing completed.");
}
要处理可以处理的任何异常,您可以使用单个
UncaughtExceptionHandler
,如下所示:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread arg0, Throwable arg1) {
//Your code for handling exceptions here
};
});