如何解决“改用原始值”的问题。声纳Qube问题?

Ria*_*adh 0 java sonarqube

对 File 对象调用 hashCode() 方法会触发此 SonarQube 问题:

而是使用原始值。

如何解决?有什么帮助吗?

File file = ......

.... = Math.abs(file.hashCode());
Run Code Online (Sandbox Code Playgroud)

更新:问题的 SonarQube 描述在这里

我可以写: .... = Math.abs(file.hashCode()+1);

Rei*_*ica 5

问题的原因是 Integer.MIN 在取绝对值时返回自身。此问题描述如下

解决方案取决于您需要的值。您建议的解决方案 ( Math.abs(file.hashCode() + 1)) 不起作用,因为如果hashCode()函数返回 Integer.MAX 那么加 1 仍然是 Integer.MIN,因此最终结果仍然可能为负数。

如果您确实需要文件的正散列,您可以执行以下操作:

final int hash = file.hashCode() == Integer.MIN ? Integer.MAX : Math.abs(file.hashCode());
Run Code Online (Sandbox Code Playgroud)