我碰到过这段代码。我从来没有见过以这种方式实施的平等。让我感到震惊的是,它确实是“整洁”的,从某种意义上说,这只是一行样板。这是否合法?
但是,我从未见过这种方法的事实让我感到怀疑。根据Java equals和hashCode的合同,以下实现是否合法?
@Override
public boolean equals(Object o)
{
return this == o || o instanceof DetailsPageTrackingRequest
&& this.hashCode() == o.hashCode();
}
@Override
public int hashCode()
{
//java.util.Objects
return Objects.hash(pageTrackingRequest, searchId, productId);
}
那么,你检查这是否是相同的实例,或者如果这是一个实例(如果它在同一场合不是null),然后比较哈希。这似乎不是一个坏主意,但我可能会错过一些东西 – AxelH
还要确保你真的想使用'instanceof'而不是'getClass()' - 参见http://stackoverflow.com/q/596462/2513200以选择参数或另一个。当使用'instanceof'时,意外地打破对称是非常容易的。 – Hulk