Dal punto di vista di uno sviluppatore che utilizza la riflessione, è non corretto per chiamare String
immutabile. Ci sono veri sviluppatori Java che usano la riflessione per scrivere software reale ogni giorno. Eliminare il riflesso come "hack" è assurdo. Tuttavia, dal punto di vista di uno sviluppatore che non usa la riflessione, dal, è corretto chiamare String
immutabile. Indipendentemente dal fatto che sia valido presumere che String
sia immutabile dipende dal contesto.
L'immutabilità è un concetto astratto e pertanto non può essere applicato in senso assoluto a qualsiasi cosa che abbia una forma fisica (vedere lo ship of Theseus). I costrutti del linguaggio di programmazione come oggetti, variabili e metodi esistono fisicamente come bit in un supporto di memorizzazione. La degradazione dei dati è un processo fisico che accade a tutti i supporti di memorizzazione, quindi non si può mai dire che i dati siano veramente immutabili. Inoltre, è quasi sempre possibile in pratica sovvertire le caratteristiche del linguaggio di programmazione volte a prevenire la mutazione di un dato particolare. Al contrario, il numero 3 è 3, è sempre stato 3, e sarà sempre 3.
Come applicato programmare dati, immutability dovrebbe essere considerata una utile assunzione piuttosto che una proprietà fondamentale. Ad esempio, se si presuppone che uno String
è immutabile, è possibile memorizzare nella cache il proprio codice hash per riutilizzarlo ed evitare il costo di dover ricalcolare il suo codice hash in un secondo momento. Praticamente tutto il software non banale si basa su ipotesi che alcuni dati non muteranno per determinate durate di tempo. Gli sviluppatori di software generalmente presuppongono che lo code segment di un programma non cambierà mentre è in esecuzione, a meno che non stiano scrivendo codice auto-modificante. Capire quali presupposti sono validi in un particolare contesto è un aspetto importante dello sviluppo del software.
Gli hack di riflessione non contano contro l'immutabilità. – Perception
http://stackoverflow.com/q/11146255/758280 – Jeffrey
Come dice @Perception, gli hack di riflessione non dovrebbero contare. La memorizzazione nella cache del valore di hash in un campo privato non influisce su alcun metodo o stato non privato. –