Ti preghiamo di considerare com.google.common.collect.ImmutableMap
Programmando sulla sua interfaccia, Mappa , crea un bug che potrebbe esplodere nel runtime in quanto tale:
Map<String, Integer> myMap = ImmutableMap.copyOf(justSomeMap);
myMap.put(key, val); // bang. runtime error.
In questo caso, l'idea di "programma sull'interfaccia e non preoccuparti della classe di implementazione" introduce un possibile bug di runtime.
L'autore del metodo factory ImmutableMap lo ha riconosciuto e ha reso il tipo restituito una classe, non un'interfaccia. I metodi che mutano Mappa sono stati deprecati in ImmutableMap consentendo così al compilatore di emettere avvisi.
- Tutto ciò che ho detto sopra è corretto?
Successivamente, una nuova interfaccia ImmutableMapInterface potrebbe essere stata facilmente creata per la classe ImmutableMap . ImmutableMapInterface sarebbe esattamente Mappa ma solo senza i metodi che consentirebbero a ImmutableMap di mutare. Ci sono ImmutableMapInterface , puoi continuare a programmare sulle interfacce.
Quindi, perché non c'è ImmutableMapInterface ? Ho intenzione di indovinare la ragione è solo convenienza. Sono d'accordo. Creare un'interfaccia per ogni singola classe suona un po 'troppo estrema. giusto?