Se queja de que la matriz que está almacenando es la misma que tiene la persona que llama. Es decir, si la persona que llama posteriormente modifica esta matriz, la matriz almacenada en el objeto (y, por lo tanto, el objeto mismo) cambiará.
La solución es hacer una copia dentro del objeto cuando se pasa. Esto se llama copiando a la defensiva. Una modificación posterior de la colección no afectará a la matriz almacenada dentro del objeto.
También es una buena práctica hacerlo normalmente al devolver una colección (por ejemplo, en una llamada correspondiente getMyArray()
). De lo contrario, el receptor podría realizar una modificación y afectar la instancia almacenada.
Tenga en cuenta que esto obviamente se aplica a todas las colecciones mutables (y, de hecho, a todos los objetos mutables), no solo a las matrices. Tenga en cuenta también que esto tiene un impacto en el rendimiento que debe evaluarse junto con otras preocupaciones.
Um ... esa solución no funcionó para mí, en realidad. Sonar todavía lo recoge y se queja de él, a pesar de hacer una copia. – ndtreviv
@ndtreviv entonces, ¿cómo lo resolvió? – sakura
@ndtreviv: Estaba teniendo este problema también, y este error no desaparecerá si el nombre de la variable local suministrada al método es el mismo que la variable de instancia que está almacenando. Asegúrese de que sean diferentes, y la solución anterior debería funcionar. Encontré esto a través del siguiente [enlace] (http://sonarqube.15.x6.nabble.com/Security-Array-is-stored-directly-weirness-td3632714.html) – Matt