非无效性要求或原则

时间:2013-06-04 07:57:18

标签: java null

我刚读过Effective Java,equals()方法的第五个原则是所有对象必须不等于null。本书接着说,程序员编写的一些类使用null的显式测试来防范这种情况:

public boolean equals(Object o){
    if (o == null)
        return false;
    ...
}

根据Effective Java,上述非空测试是不必要的。但是,我的问题是,为什么那么多程序员会测试这种非无效性要求呢?

5 个答案:

答案 0 :(得分:8)

您可以使用instanceof测试来执行此操作:

public boolean equals(Object o){
    if (!(o instanceof MyObject))
        return false;
    ...
}

null不是任何事情的实例,所以这是有效的。

答案 1 :(得分:2)

Object firstObject = null;
secondObject.equals(firstObject);

你怎么能阻止这个?如果您在使用它之前不检查null,那么它将崩溃。我想你还需要检查类类型,如下面的

        if (other == null || other.getClass() != this.getClass()) {
           return false;
        }

答案 2 :(得分:0)

要在NullPointerException被调用时阻止equals()

答案 3 :(得分:0)

可能的原因检查:

来自其他语言的旧习惯

不熟悉你提到的原则

可能会抛出空指针异常的库(你无法保证别人没有做过蠢事!)

如果您有一些嵌套命令只需要针对对象的非null实例进行求值,则可能需要绕过

答案 4 :(得分:0)

行业中有许多建议,以避免不必要的检查或代码中的陷阱,但事实上可能发生错误,或者可能存在无法控制的情况,例如来自某些第三方系统的数据缺少哪一个&#39 ; s系统期待所以需要检查。世界并不完美!!