Sonar Security - 直接存储数组::为什么只在ArrayList中发出数组?

时间:2012-10-10 21:13:18

标签: java sonarqube

我有4个班级

Class A {    
    public void setMyArray(String[] myArray) { 
      this.myArray = myArray; 
    }
}

Class B {    
    public void setMyArrayList(ArrayList myArray) { 
      this.myArray = myArray; 
    }
}
Class C {
  public void setX(int x) { 
  this.myX = x; 
}}
 Class D {    
public void setX(Integer x) { 
  this.x = x; 
}

}

Sonar报告第一类的问题只有“数据直接存储”

但是声纳没有在第二堂课报告同样的问题。我想知道为什么?

1 个答案:

答案 0 :(得分:3)

因为任何人都可以修改外部阵列。

使用列表,您可以选择传入一个不可修改的列表来解决该问题,同时如果您愿意,仍然可以轻松进行外部访问 - 。

因此第二种情况确实存在问题,但它不太常见,可以更容易避免。

使用原始数组还有其他问题。如果阵列需要增长,并且您还需要外部访问,那么您就不再拥有它了 - 它们指向的是旧数组,而不是新的扩展数组。使用列表,这些都是封装的。