【问题标题】:What is guardian code?什么是监护人代码?
【发布时间】:2017-05-09 15:33:44
【问题描述】:

我的讲师开始在我们的阅读材料中提到一种叫做监护人代码的东西。如果有帮助,这是一个 Java 初学者模块。以下是文中的一些参考。

由于没有 mutator,因此没有 mutator Guardian 代码,Guardian 代码被强制进入构造函数(作为对 validateDate(...) 私有帮助方法的调用)。构造函数通常会调用 mutators 来检查作为构造函数参数接收到的初始值是否有效,然后再分配它们各自的实例变量。

任何帮助将不胜感激

谢谢!!

【问题讨论】:

  • 我只能猜测它们的意思是验证检查。
  • 请注意,您的讲师(大概)会帮助您,因此请他/她澄清是一个好方法。

标签: java definition


【解决方案1】:

文本指的是提供参数验证的代码,“保护”对象不进入错误状态。

Fox 示例,如果您正在构建一个具有名为 serialNumberString 属性的类,该属性必须是 7 到 9 个字符长,您可以添加这样的 setter:

void setSerialNumber(String sn) {
    if (sn == null || sn.length() < 7 || sn.length() > 9) {
        throw new IllegalArgumentException("sn");
    }
    serialNumber = sn;
}

上面代码sn-p中的if是“监护人代码”。教科书说,当类是可变的时,这个守护者代码进入设置器。但是,当类是不可变的时,您可以将此代码移动到构造函数中:

MyObject(String sn) {
    if (sn == null || sn.length() < 7 || sn.length() > 9) {
        throw new IllegalArgumentException("sn");
    }
    serialNumber = sn;
}

【讨论】:

    【解决方案2】:

    您的讲师可能是指守卫代码。这增加了一个额外的验证防御层,以确保您接收或发送的数据不会以任何方式无效。通常,编写保护代码以确保他们需要的值不是null(以防止NullPointerExceptions),或者在预期范围内 - 尽管这是关于验证的更广泛讨论。

    例如,如果我正在编写一个名为 boolean validateDate(Date date) 的方法,那么我要编写的一段保护代码是:

    public boolean validateDate(Date date) {
        if(null == date) {
            throw new IllegalArgumentException("Date can't be null");
        }
        // other logic to follow
    }
    

    【讨论】:

    • "我要写的一段保护代码是:" 但是你不会从你的构造函数中调用它,对吗?没有使它成为最终的或静态的? :)
    • @AndyTurner:不,不会特别从我的构造函数中调用它。这更多地是作为保护代码的通用示例。可以在构造函数中采用任何他们希望保护代码的样式或方法。
    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2019-10-29
    • 2010-09-09
    • 2011-04-23
    相关资源
    最近更新 更多