例外与流量控制

Mic*_*ann 2 java exception

有效的Java异常的文章描述了CheckingAccount其应该processCheck().此外,它指出:

在Java中表示应急响应的自然方式是定义两个例外,比如说StopPaymentExceptionInsufficientFundsException

对我而言,这听起来像用于流量控制的例外.你能解释为什么在这里使用流量控制的检查异常是可以的吗?(或者这不是流量控制的情况.)

Mar*_*nik 5

例外情况,特别是检查的变种,非常适合流量控制,但仅限于特殊情况:如果异常是每次运行代码可预测的事件,因为它是"快乐日情景"的一部分,只有这样才是你滥用他们.教科书的例子是使用while (true)循环迭代数组,依靠ArrayIndexOutOfBounds它来打破它.

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