我的讲师开始在我们的阅读材料中提到一些叫做守护者代码的东西。如果有帮助,这是一个Java初学者模块。以下是文中的一些参考资料。
由于没有mutator,因此没有mutator监护代码,因此监护人代码被强制进入构造函数(作为对validateDate(...)私有帮助器方法的调用)。构造函数通常会调用mutator来检查接收到的初始值,因为构造函数参数在为它们分配各自的实例变量之前是有效的。
非常感谢任何帮助
谢谢!
答案 0 :(得分:3)
该文本指的是提供参数验证的代码,“防止”对象进入不良状态。
Fox示例,如果您要构建一个名为String
的{{1}}属性的类,其长度必须为7到9个字符,那么您可以添加这样的setter:
serialNumber
上面代码段中的 void setSerialNumber(String sn) {
if (sn == null || sn.length() < 7 || sn.length() > 9) {
throw new IllegalArgumentException("sn");
}
serialNumber = sn;
}
是“监护人代码”。教科书说,当课程可变时,这个监护人代码会进入制定者。但是,当类是不可变的时,您将此代码移动到构造函数中:
if
答案 1 :(得分:1)
您的讲师可能意味着保护代码。这增加了一个额外的防御层验证,以确保您接收或发送的数据不会以任何方式无效。通常,编写保护代码以确保它们所需的值不是null
(以防止NullPointerException
s),或者在预期范围内 - 尽管这是对验证的更广泛讨论。 / p>
作为一个例子,如果我正在编写一个名为boolean validateDate(Date date)
的方法,我写的一段保护代码是:
public boolean validateDate(Date date) {
if(null == date) {
throw new IllegalArgumentException("Date can't be null");
}
// other logic to follow
}