Disons que j'écris une méthode qui devrait renvoyer une Map . 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 avait aucune raison de modifier cette carte une fois qu'elle est créée. Ainsi, je voudrais retourner un ImmutableMap .
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
Dois-je laisser le type de retour comme une carte générique, ou dois-je spécifier que je retourne une ImmutableMap?
D'un côté, c'est exactement pourquoi les interfaces ont été créées pour; pour masquer les détails d'implémentation.
D'un autre côté, si je laisse ça comme ça, d'autres développeurs pourraient manquer le fait que cet objet est immuable. Ainsi, je n'atteindrai pas un objectif majeur des objets immuables; pour rendre le code plus clair en minimisant le nombre d'objets qui peuvent changer. Pire encore, après un certain temps, quelqu'un pourrait essayer de changer cet objet, ce qui entraînera une erreur d'exécution (le compilateur ne l'avertira pas).