我们知道如果我们覆盖hashCode
,我们必须覆盖equals
。如果我只覆盖equals
,它仍会编译。这是更好还是编译器为什么不发出警告或类似的?
答案 0 :(得分:1)
编译器通常不会强制执行语义约束。
在这种特殊情况下,编译器将无法提供可靠的警告 - 如果您知道基类hashCode
适用于派生类,该怎么办?或者如果你真的需要equals
?
答案 1 :(得分:1)
如果您愿意,可以将编译器设置为将此方案视为错误。
<强>的IntelliJ 强>
设置&gt;编辑&gt;检查&gt; Java&gt;可能的错误&gt; equals()和hashCode()未配对
描述是,
此检查报告覆盖equals()方法的类,但不覆盖hashCode()方法,反之亦然,这可能会在将类添加到Collection时导致问题。
启用检查并将其严重性设置为错误。
<强>的Eclipse 强>
偏好设置&gt; Java&gt;编译器&gt;错误/警告&gt;潜在的编程问题&gt;班级覆盖&#39;等于()&#39;但不是&#39; hashCode()&#39;