为什么我可以编译错误的代码?

时间:2017-01-19 19:04:25

标签: java oop override

我们知道如果我们覆盖hashCode,我们必须覆盖equals。如果我只覆盖equals,它仍会编译。这是更好还是编译器为什么不发出警告或类似的?

2 个答案:

答案 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;