SonarLint 警告 java:S1206 问题,但 hashCode 和 equals 已实现

SonarLint alerting for a java:S1206 issue but hashCode and equals are implemented

我在 Eclipse 上有一个小的 Java 项目,我喜欢使用 SonarLint 检查代码味道,但今天我遇到了一个奇怪的 java:S1206 问题,上面写着 "equals(Object obj)" and "hashCode()" should be overridden in pairs。 在正确覆盖 equalshashCode 方法的长期模型对象上报告了此问题。

我已经尝试重新运行 SonarLint 几次,但结果是一样的。我所做的最后修改是更新一些依赖项版本和导入。

我正在使用 Eclipse 2019-12 (4.14.0) Build id:20191212-1212 和 SonarLint for Eclipse 版本 5.0.0.15138。 Eclipse 运行正在使用 JDK 1.8.0_231.

项目代码可以在我的 ISS-Tracker GitHub repository.

上找到

问题似乎与我用来执行 Eclipse 的 Java 虚拟机 (JVM) 版本有关。我修改了 eclipse.ini 文件以使用 JVM 11 执行 Eclipse,SonarLint 未报告任何问题。为了确定这一点,我删除了配置,重新启动了 Eclipse,重新执行了 SonarLint 报告,java:S1206 问题再次出现。

对于面临相同问题(或类似问题)的人:

  1. 下载一个Java虚拟机11;

  2. 在您的机器上安装JVM并注释(复制)安装目录(例如/opt/openjdk/jdk-11.0.2);

  3. 在文本编辑器上打开 $ECLIPSE_HOME/eclipse.ini 文件;

  4. 添加以下行,将 <JAVA_HOME> 替换为带注释的安装目录;

-vm
<JAVA_HOME>/bin

eclipse.ini 文件应如下所示:

  1. 重新启动 Eclipse。

  2. 运行 通过右键单击项目文件夹、菜单 SonarLint、项目 Analyze,SonarLint 再次报告。