You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何降低checkForNameAndAmbigousInfo方法的圈复杂度?SonarLint告警

降低圈复杂度的优化方案

问题分析

原方法checkForNameAndAmbigousInfo的圈复杂度超标,核心原因是重复判断isNameMatching条件,且冗余枚举了isAmbigous的所有布尔组合——四个分支覆盖了od和od1是否模糊的全部可能性(两布尔值共4种组合),本质上只要isNameMatching为true,无论两个对象的模糊状态如何,都会返回true。

优化步骤

  1. 提取重复判断:提前计算isNameMatching的结果,避免重复调用同一方法,减少冗余分支。
  2. 简化逻辑表达式:由于四个分支的isAmbigous组合覆盖了所有可能情况,因此只要isNameMatching为true,直接返回true即可,无需逐一枚举分支。

优化后的代码

private boolean checkForNameAndAmbigousInfo(final Attribute<NonSpatialObject> od,
        final Attribute<NonSpatialObject> od1) {
    // 提前计算名字匹配结果,避免重复调用
    boolean namesMatch = isNameMatching(od, od1, getModel().FEATURES.SignpostInfo.OtherDestination);
    // 只要名字匹配,无论模糊状态如何都返回true
    return namesMatch;
}

private boolean isAmbigous(final Attribute<NonSpatialObject> currSignInfo) {
    final DictionaryRangeItem ambiAttribute =
        getToolkit().getDictionaryTools().getDictionaryRangeItemFromComposite(currSignInfo,
            getModel().FEATURES.SignpostInfo.AmbiguousInfo);

    return ambiAttribute.equals(getModel().RANGES.AmbiguousInfo.Ambiguous);
}

补充说明

如果原代码逻辑确实是名字匹配时,无论两个对象是否模糊都返回true,上述优化完全等价于原逻辑,且圈复杂度直接降至2,完全满足SonarLint的阈值要求。若后续需求调整(比如需要排除特定模糊组合),可再针对性修改逻辑。

内容的提问来源于stack exchange,提问作者deepankar gautam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:55:26