我正在使用Eclipse生成.equals()
和.hashCode()
,并且有一个标签为“使用'instanceof'比较类型”的选项。缺省情况是不选中此选项,并使用.getClass()
比较类型。有什么理由比.getClass()
更喜欢instanceof
吗?
不使用instanceof
:
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
使用
instanceof
:if (obj == null)
return false;
if (!(obj instanceof MyClass))
return false;
我通常检查
instanceof
选项,然后进入并删除“if (obj == null)
”检查。 (这是多余的,因为空对象将始终失败instanceof
。)有什么原因是个坏主意吗? 最佳答案
如果使用instanceof
,则使自己的equals
实现final
将保留方法x.equals(y) == y.equals(x)
的对称性。如果final
似乎是限制性的,请仔细检查您的对象等效性概念,以确保您的重写实现完全维护Object
类建立的协定。