2012-01-25 14 views
5

Ho una classe che è immutabileimmutabile di una classe quando un'istanza variabile presente come arraylist

Supponiamo Ho un metodo getter per una variabile membro di tipo ArrayList. In quel caso quando ottengo un riferimento a quella variabile, posso aggiungere o rimuovere un elemento da esso. In tal caso l'immutabilità sembra essere violata.

Qualcuno può spiegare questo concetto in dettaglio?

+2

Vedere http://stackoverflow.com/questions/8892350/immutable-vs-unmodifiable-collection – Zaki

+1

Vedere anche "Effective Java" di Joshua Bloch, Articolo 24: Creare copie difensive quando necessario. Il capitolo è disponibile on line [qui] (http://www.informit.com/articles/article.aspx?p=31551&seqNum=2) – mike9322

+0

Se classe dovrebbe essere tutto immutabile, salvare il riferimento all'elenco _in la tua classe_ (dopo la copia) come un'istanza di 'UnmodifiableList'. Non sono necessarie (supplementari) copie difensive e impedisce a _your_ class di modificarlo durante la manutenzione. –

risposta

3

siete effettivamente ragione. L'immutabilità è violata.

Per fare una classe immutabile, è necessario fare in modo che tutti i suoi getter ritorno copie di sicurezza di qualsiasi classe il cui stato potrebbe altrimenti cambiare.

3

Si consiglia di non fornire variabile di tipo ArrayList. Fornire solo List e assicurarsi che il getter fa una delle prossime:

  1. restituisce una copia della vostra lista
  2. o restituisce elenco non modificabile

o entrambi.

+1

Non è necessario restituire sia una copia dell'elenco che è anche non modificabile –

0

se si crea una nuova istanza di tale mutato oggetto di tipo X, allora istanza di X sarebbe considerato come immutabile. È più facile capire se consideri il tuo ArrayList. Hai dei metodi per modificare questa lista. Ogni metodo di modifica fa una copia di questo elenco e aggiunge/rimuove/aggiorna sulla nuova copia e torna indietro.

Problemi correlati