Diciamo che sto scrivendo un metodo che dovrebbe restituire una mappa . Per esempio:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Dopo averci pensato per un po ', ho deciso che non c'è motivo di modificare questa mappa una volta creata. Pertanto, vorrei restituire una ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Devo lasciare il tipo restituito come una mappa generica o devo specificare che sto restituendo una mappa immutabile?
Da un lato, questo è esattamente il motivo per cui sono state create le interfacce; per nascondere i dettagli di implementazione.
D'altra parte, se lo lascio così, altri sviluppatori potrebbero perdere il fatto che questo oggetto è immutabile. Pertanto, non raggiungerò l'obiettivo principale di oggetti immutabili; per rendere il codice più chiaro riducendo al minimo il numero di oggetti che possono cambiare. Ancora peggio, dopo un po ', qualcuno potrebbe provare a cambiare questo oggetto, e questo risulterà in un errore di runtime (il compilatore non lo avviserà).