1

我有 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 报告第一类的问题 Only "Array is stored directly"

但声纳在二等舱没有报告同样的问题。我想知道为什么 ?

4

1 回答 1

3

因为任何人都可以修改外部数组。

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

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

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

于 2012-10-10T21:15:06.840 回答