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(我的对象只存在于明确定义的范围内,永远不会保存或传输)。