PMD ha una regola chiamata ArrayIsStoredDirectly nel set di regole Sun Security:ragionamento dietro ArrayIsStoredDirectly regola della PMD
Costruttori e metodi che ricevono gli array dovrebbero clonare oggetti e memorizzare la copia. Ciò impedisce che le future modifiche da parte dell'utente influiscano sulla funzionalità interna.
Ecco il loro esempio:
public class Foo {
private String [] x;
public void foo (String [] param) {
// Don't do this, make a copy of the array at least
this.x=param;
}
}
Non credo di capire completamente il ragionamento dietro questa regola. È perché i valori nella matrice passata possono essere alterati da qualche altra parte? C'è una differenza tra il passaggio di una raccolta e il passaggio di un array rispetto a questo?
Nessuna differenza in relazione al passaggio dell'array alla raccolta. Una leggera differenza nel trattamento sicuro degli array e delle raccolte è che con gli array è corretto chiamare .clone(), ma non ci si deve fidare del metodo .clone() di una raccolta. –