Java 如何将FindBugs规则EI_EXPOSE_REP迁移到Squid?

Java 如何将FindBugs规则EI_EXPOSE_REP迁移到Squid?,java,sonarqube,findbugs,Java,Sonarqube,Findbugs,将SonarQube版本4.3更新到5.6后,我尝试将所有FindBugs规则迁移到Squid规则,因为FindBugs规则都标记为已弃用 但我对FindBugs规则有一个问题: 返回对存储在对象某个字段中的可变对象值的引用将公开对象的内部表示。如果实例由不受信任的代码访问,并且对可变对象的未经检查的更改将危及安全性或其他重要属性,则需要执行不同的操作。在许多情况下,返回对象的新副本是更好的方法 我应该迁移到Squid规则: 可变对象是那些状态可以更改的对象。例如,数组是可变的,而字符串不是可变

将SonarQube版本4.3更新到5.6后,我尝试将所有FindBugs规则迁移到Squid规则,因为FindBugs规则都标记为已弃用

但我对FindBugs规则有一个问题:

返回对存储在对象某个字段中的可变对象值的引用将公开对象的内部表示。如果实例由不受信任的代码访问,并且对可变对象的未经检查的更改将危及安全性或其他重要属性,则需要执行不同的操作。在许多情况下,返回对象的新副本是更好的方法

我应该迁移到Squid规则:

可变对象是那些状态可以更改的对象。例如,数组是可变的,而字符串不是可变的。不应将可变类成员返回给调用方或直接接受和存储。这样做会使您容易受到类状态中意外更改的影响

而是使用不可修改的
集合
(通过
集合.不可修改集合
集合.不可修改列表
,…)或制作可变对象的副本,并存储或返回副本

此规则检查数组、集合和日期是否未直接存储或返回

以下:

EI_EXPOSE_REP S2384可变成员不应直接存储或返回 EI_EXPOSE_REP2 S2384可变成员不应直接存储或返回 EI_EXPOSE_STATIC_REP2 S2384可变成员不应直接存储或返回

使用Squid规则,对于类型为的代码,我会遇到很多问题,例如:

公共类MyClass{
私人名单资产;
公共列表getAssetId(){
返回资产;
}
公共无效setAssetId(列出AssetId){
this.assetIds=assetIds;
}
}
根据FindBugs规则,我没有得到这个问题。它只检查和数组。这是FindBugs的bug吗

是否有任何方法可以在不更改旧代码的情况下消除类型的所有问题,但仍然可以看到和数组的问题