SonarQube警告:使用equals代替==:相关?

时间:2016-10-19 07:07:53

标签: java sonarqube equals

SonarQube规则在我的开发项目中实施,我不确定规则“S1698”( [MAJOR]更改此比较以使用equals方法)在我的几个案例中是相关的(我仍然需要为这些警告做点什么)。你明白为什么我的代码/算法会有武装,为什么应该通过实现平等或重新审视算法来减轻它?

第一个简单案例

我有一组(轻度复杂的)物体。我需要找到最相关的并在组合框中显示它们(选择最相关)。伪代码:

List<MyObject> list = ...;
MyObject bestMatch = findBestMatch(list);
for(obj : list) {
  addToCombo(obj, obj == bestMatch /* isSelected */);
}

我可以使用“obj.equals(bestMatch)”(我不需要实现),这反过来会调用==,但如果有人有一天实现“等于”,我的代码可能会调用深度比较不需要。

其他情况

我有一个永远不会被复制的对象图,由它们的实例定义,并且按全值进行比较并不真正相关。在我的图表中,我可以拥有2个具有相同内容的对象,但我需要它们是不同的对象(用户必须编辑它们直到它们的值变得不同)。

我需要用几种方式索引它们(例如:按名称,这可能不是唯一的)来制作快速请求,例如“图中是否有任何其他对象具有相同名称且未被禁用”。我写过像伪代码这样的搜索方法:

boolean isNameInConflict(MyObject testedObject) {
 List<MyObject> list = nameIndex.get(testedObject.getName());
 for(obj : list) {
  if (obj != testedObject && !obj.isDisabled()) { return true; }
 }
 return false;
}

}

再次,我可以调用equals(我不需要实现),但我觉得它可以让维护者认为我确实实现了它。或者我可以为每个对象生成一个唯一的自动递增ID(我的对象只存在于明确定义的范围内,永远不会保存或传输)。

0 个答案:

没有答案