Digamos que estou escrevendo um método que deve retornar um Mapa . Por exemplo:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Depois de pensar um pouco, decidi que não há razão para modificar este mapa depois de criado. Portanto, gostaria de retornar um ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Devo deixar o tipo de retorno como um Mapa genérico ou devo especificar que estou retornando um ImmutableMap?
De um lado, é exatamente para isso que as interfaces foram criadas; para ocultar os detalhes de implementação.
Por outro lado, se eu deixar assim, outros desenvolvedores podem perder o fato de que esse objeto é imutável. Portanto, não alcançarei o objetivo principal de objetos imutáveis; para tornar o código mais claro, minimizando o número de objetos que podem ser alterados. Pior ainda, depois de um tempo, alguém pode tentar alterar este objeto, e isso resultará em um erro de execução (o compilador não avisará sobre isso).