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

如何修改代码解决SonarQube规则squid:S2384漏洞:返回deductionfrequency副本

解决SonarQube squid:S2384漏洞的代码修改方案

squid:S2384规则触发的原因是直接返回了可变集合成员变量的引用,外部调用者可通过该引用修改集合内部数据,破坏类的封装性,同时导致数据变更不可预测(对应漏洞标签里的unpredictable)。修复核心是返回集合的副本或不可变包装,避免外部直接操作原集合。

以下是几种可行的修改方案:

  • 返回ArrayList副本:创建新集合复制原元素,彻底隔离原集合与返回值

    public List<String> getDeductionfrequency() {
        return new ArrayList<>(deductionfrequency);
    }
    

    外部修改返回的集合不会影响原成员变量,适合需要允许外部修改返回集合但不影响内部数据的场景。

  • 返回不可变集合(Java 9+):利用List.copyOf()生成不可变集合

    public List<String> getDeductionfrequency() {
        return List.copyOf(deductionfrequency);
    }
    

    返回的集合无法被修改,安全性更高,但如果原集合为null会抛出NullPointerException,需提前处理空值。

  • 返回不可修改的集合包装:用Collections.unmodifiableList()包装原集合

    import java.util.Collections;
    
    public List<String> getDeductionfrequency() {
        return Collections.unmodifiableList(deductionfrequency);
    }
    

    外部尝试修改会抛出UnsupportedOperationException,但原集合内部的变更会同步到返回的包装集合中,适合仅需防止外部修改的场景。

空值处理补充

如果原集合可能为null,建议添加空值判断避免异常:

public List<String> getDeductionfrequency() {
    return deductionfrequency == null ? Collections.emptyList() : new ArrayList<>(deductionfrequency);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:06