上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.4 检查前置条件
接下来,我们将注意力转向当前主构造方法的一个问题。在本章最开始我们曾提到,有理数的分母不能为0。而目前我们的主构造方法接收以d传入的0:
面向对象编程的一个好处是可以将数据封装在对象里,以确保整个生命周期中数据都是合法的。对于Rational这样的不可变对象而言,这意味着需要确保对象在构造时数据合法。由于对于Rational数来说分母为0是非法的状态,当0作为参数d传入的时候,不应该允许这样的Rational被创建出来。
解决这个问题的最佳方式是对主构造方法定义一个前置条件(precondition),d必须为非0值。前置条件是对传入方法或构造方法的值的约束,这是方法调用者必须要满足的。实现这个的一种方式是用require,[1]就像这样:
require方法接收一个boolean的参数。如果传入的参数为true,require将会正常返回。否则,require将会抛出IllegalArgumentException来阻止对象的构建。