gpt4 book ai didi

java - 流量控制异常的替代方案是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:42 25 4
gpt4 key购买 nike

我继承了一个 Java 应用程序,该应用程序处理请求并在确定应取消请求时抛出异常。异常对于以前的开发人员来说很方便,因为它们是退出不再适用的逻辑树的简单方法(是的 goto),并且它会将堆栈跟踪打印到日志中,这是很好的信息。好像论坛和博客上的共识是不应该用异常来做流量控制,处理过的请求有一半以上都被取消了,所以肯定不是异常情况。一个论点是性能,这并不适用,因为我们的异常代码多年来运行得足够快。另一个论点是它的 goto-ness 不明确,我同意这一点。我的问题是:有什么选择。我唯一能想到的是,如果处理应该继续,则让每个方法返回 true,如果不应该,则返回 false。这似乎会极大地膨胀我的代码改变这个:

checkSomething();
checkSomethingElse();

进入这个:

boolean continueProcessing = false;
continueProcessing = checkSomething();
if (!continueProcessing) {
return false;
}
continueProcessing = checkSomethingElse();
if (!continueProcessing) {
return false;
}

然后如果该方法应该返回一些东西怎么办?任何指导都会很棒。我真的很想观察任何可用的“最佳实践”。

更新:

我可能首先应该提到的一点是,请求被取消的次数超过 50%,这并不意味着事情不对劲,这意味着根本不需要请求。

最佳答案

在您的场景中,备选方案是抛出异常并返回结果。

哪个最好(哪个是“最佳实践”)取决于“检查...”方法的失败是否应归类为正常或异常。在某种程度上,这是必须做出的判断。在进行该调用时,需要牢记以下几点:

  • 创建 + 抛出 + 捕获异常比测试 boolean 结果慢大约 3 个数量级。

  • 返回状态码的最大问题是很容易忘记测试它们。

总而言之,最好的做法是不使用异常来实现正常流控制,但是由您决定正常之间的边界在哪里异常(exception)是。


在没有看到真实代码/上下文的情况下,我的直觉是这可能是使用异常的合适位置。

关于java - 流量控制异常的替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797781/

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