Disons que je suis en train d'écrire une méthode qui devrait retourner une Carte. Par exemple:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
Après y avoir réfléchi pendant un moment, j'ai décidé qu'il n'y a pas de raison de modifier cette Carte une fois qu'il est créé. Donc, je voudrais revenir un ImmutableMap.
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Dois-je laisser le type de retour en tant que générique de la Carte, ou devrais-je préciser que je suis de retour d'un ImmutableMap ?
D'un côté, c'est exactement pourquoi les interfaces ont été créés pour; pour cacher les détails d'implémentation.
D'autre part, si je vais le laisser comme cela, d'autres développeurs risquent de manquer le fait que cet objet est immuable. Donc, je ne vais pas atteindre un objectif majeur des objets immuables; pour rendre le code plus clair en réduisant le nombre d'objets qui peuvent changer. Pire encore, après un certain temps, quelqu'un pourrait essayer de modifier cet objet, et il en résultera une erreur à l'exécution (Le compilateur ne pas avertir à ce sujet).