我碰到過這段代碼。我從來沒有見過以這種方式實施的平等。讓我感到震驚的是,它確實是「整潔」的,從某種意義上說,這只是一行樣板。這是否合法?
但是,我從未見過這種方法的事實讓我感到懷疑。根據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