Effective Java Exceptions文章描述的CheckingAccount
应processCheck()
。此外,它指出:
在Java中表示意外响应的自然方式是定义两个例外,例如
StopPaymentException
和InsufficientFundsException
对我而言,这听起来像用于流量控制的例外。你能解释为什么在这里使用流量控制的检查异常是可以的吗? (或者这不是流量控制的情况。)
答案 0 :(得分:5)
异常,特别是已检查种类,非常适合流量控制,但仅适用于特殊情况:如果异常是可预测发生的每次< / em>你运行代码,因为它是“快乐日场景”的一部分,只有这样你才会滥用它们。教科书的示例是使用while (true)
循环迭代数组,依靠ArrayIndexOutOfBounds
来打破它。
由例外处理的另一个问题是“带外信令”,你已经占用了方法的“快乐日”数据的返回值,你需要另一个明确的信道来表明原因没有数据要返回。在Haskell / Scala中你会使用 Maybe monad;在Java中,你最好坚持使用已检查的异常。
答案 1 :(得分:0)
否
不要使用流量控制的例外。当您的服务器处于高负载状态时,抛出异常将使您的服务器更慢,更低