gpt4 book ai didi

java - 空结果与为可预测但无法预防的故障抛出异常

转载 作者:行者123 更新时间:2023-12-04 16:02:10 24 4
gpt4 key购买 nike

对于遇到可预测但无法预防的故障的方法,首选设计是什么? 他们应该返回空结果还是在失败时抛出异常?请解释您的理由。

我将给出两个示例方法:

  1. 类似Arrays.binarySearch() 的方法返回数组中值的索引。
  2. Tickets.buy(20, 100)。票务机器人尝试使用 100 美元购买至少 20 张票。该方法返回已购买的门票列表。

对于这两种方法,让我们假设用户无法预测该方法是否会成功找到匹配项。

如果出现以下情况,方法 1 可能会失败:

  • 该数组不包含所需的值。

如果出现以下情况,方法 2 可能会失败:

  • 没有足够的门票。
  • 有足够的门票出售,但价格超过 100 美元。

Java 选择为方法 1 返回相当于空结果的结果,但对方法 2 执行相同的操作将无法区分这两种错误。在两种可能的设计之间进行选择的准则是什么?

请注意,虽然这个问题包含两种具体方法,但我寻找的是通用设计指南,而不是上述方法的特定解决方案。

最佳答案

最佳方法视情况而定。

案例 1:由于该方法返回找到的元素的索引,如果没有找到所需的值,我建议返回 -1。坚持使用几乎每个人都熟悉的众所周知的 API,例如 indexOf()

案例 2:在这里,我建议使用异常(InsufficientMoneyExceptionOutOfTicketsException、...)。空列表或 null 意义不大,并且不能反射(reflect)不同的错误情况。这样您就可以在各自的 catch block 中正确处理异常。

一般来说,您必须记住抛出异常是昂贵操作,因为必须构建堆栈跟踪。

关于java - 空结果与为可预测但无法预防的故障抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160506/

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