Digamos que estoy escribiendo un método que debería devolver un mapa . Por ejemplo:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Después de pensarlo un rato, he decidido que no hay razón para modificar este mapa una vez creado. Por lo tanto, me gustaría devolver un ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
¿Debo dejar el tipo de devolución como un mapa genérico o debo especificar que estoy devolviendo un mapa inmutable?
Por un lado, esta es exactamente la razón por la que se crearon las interfaces; para ocultar los detalles de implementación.
Por otro lado, si lo dejo así, otros desarrolladores podrían perder el hecho de que este objeto es inmutable. Por lo tanto, no lograré un objetivo importante de objetos inmutables; para hacer el código más claro minimizando el número de objetos que pueden cambiar. Peor aún, después de un tiempo, alguien podría intentar cambiar este objeto, y esto resultará en un error de tiempo de ejecución (el compilador no lo advertirá).