gpt4 book ai didi

java - ErrorHandler 用于在一个地方解决多个异常?

转载 作者:行者123 更新时间:2023-11-30 03:59:46 26 4
gpt4 key购买 nike

我有一个 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/

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