2

The Effective Java Exceptions article describes a CheckingAccount which should processCheck(). Furthermore it states:

The natural way to represent the contingency responses in Java is to define two exceptions, say StopPaymentException and InsufficientFundsException

To me this sounds like exceptions used for flow control. Could you please explain why it is okay to use checked exceptions for flow control here? (Or whether this is no case of flow control.)

4

2 回答 2

5

异常,尤其是检查型异常,非常适合流控制,但仅适用于异常情况:如果异常是每次运行代码时都可以预见的情况,因为它是“快乐一天场景”的一部分,那么只有这样你滥用它们。教科书的例子是使用while (true)循环来迭代数组,指望ArrayIndexOutOfBounds打破它。

异常处理的另一个问题是“带外信号”,您已经占用了“快乐日”数据的方法返回值,并且您需要另一个可区分的通道来表明没有数据的原因返回。在 Haskell/Scala 中,你会为此使用Maybe monad;在Java中你最好坚持检查异常。

于 2013-01-15T10:50:07.530 回答
0

不要使用异常进行流量控制。当您的服务器处于高负载时,抛出异常会使您的服务器更加缓慢和停机

于 2013-01-15T11:02:23.720 回答