我有一个 ServiceExecutor
并运行一个很长的例程(网络服务调用、数据库更新、用户更新等)。由于这些例程可能会导致多个错误,因此我希望在一个位置捕获大量错误。因此我用trycatch包裹它。但每个异常都应该获得自定义错误处理,因此将有 5-10 行代码来解决错误。
问题:我的 runLongRoutine()
变得太大,所以我必须以某种方式将错误处理排除在外。但我不想重新抛出这些异常,因为任何使用 runLongRoutine() 的类都不应该关心错误,甚至不应该知道可能会发生错误。
我如何调整这里的错误处理?有我可以选择的设计模式吗?
class ServiceExecutor {
void runLongRoutine() {
try {
several(param1);
calls();
to(param2);
different(param3, param1);
methods();
} catch (CustomException e) {
//5-10 lines of code
} catch (IOException e) {
//5-10 lines of code
} catch (NetworkException e) {
//5-10 lines of code
}
//to be continued
}
}
最佳答案
您可以轻松地将异常处理(针对每种类型的异常)和/或实际代码分解为单独的私有(private)方法,例如
class ServiceExecutor {
void runLongRoutine() {
try {
runLongRoutine0();
} catch (CustomException e) {
//5-10 lines of code
} catch (IOException e) {
//5-10 lines of code
} catch (NetworkException e) {
//5-10 lines of code
}
//to be continued
}
private void runLongRoutine0() throws CustomException, IOException, NetworkException {
several(param1);
calls();
to(param2);
different(param3, param1);
methods();
}
}
或
class ServiceExecutor {
void runLongRoutine() {
try {
several(param1);
calls();
to(param2);
different(param3, param1);
methods();
} catch (CustomException e) {
handleCustomException(e);
} catch (IOException e) {
handleIOException(e);
} catch (NetworkException e) {
handleNetworkException(e);
}
//to be continued
}
private void handleCustomException(CustomException e) { ... }
private void handleIOException(IOException e) { ... }
private void handleNetworkException(NetworkException e) { ... }
}
如果确实有必要,甚至可以结合使用两种方法。
关于java - ErrorHandler 用于在一个地方解决多个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22249573/