我正在使用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类建立的协定。

10-07 19:34
查看更多