我刚读过Effective Java,equals()
方法的第五个原则是所有对象必须不等于null
。本书接着说,程序员编写的一些类使用null
的显式测试来防范这种情况:
public boolean equals(Object o){
if (o == null)
return false;
...
}
根据Effective Java,上述非空测试是不必要的。但是,我的问题是,为什么那么多程序员会测试这种非无效性要求呢?
答案 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系统期待所以需要检查。世界并不完美!!