如何解决“使用原始值”。 SonarQube问题?

时间:2016-11-29 09:40:00

标签: java sonarqube

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

  

改为使用原始值。

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

File file = ......

.... = Math.abs(file.hashCode());

更新:问题的SonarQube描述为here

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

1 个答案:

答案 0 :(得分:4)

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

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

如果你真的需要文件的正哈希,你可以这样做:

final int hash = file.hashCode() == Integer.MIN ? Integer.MAX : Math.abs(file.hashCode());