1.异常应该只用于异常的情况下;它们永远不应该用于正常的控制流。
2.设计良好的API不应该强迫它的客户端为了正常的控制流而使用异常。如果类具有“状态相关”方法,即只有在特定的不可预知的条件下才可以被调用的方法,比如Iterator接口的next。 这个类往往也应该有个单独的“状态测试”方法,即指示是否可以调用这个状态相关的方法,比如Iterator接口的hasNext。
- 另一种做法是,如果“状态相关的”方法无法执行想要的计算,就让它返回一个零长度的optional值,或者返回一个可识别的值,比如null。
思考:对于书中提出的设计api的方法,使用类似hasNext的状态测试方法,在可读性上更高, 使用optional或null 可以少一个状态只是方法,但可读性相对较差。而且使用optional,性能也会有一定的损耗。