La mise à jour est la valeur d'une carte par sa référence mauvaise muter la pratique?

oeufs:

J'ai un code similaire à tout cela autour d'une base de code, je travaille sur:

Map<String, Map<Object, Integer>> mapOfMap = new HashMap<>();

Map<Object, Integer> mapA = mapOfMap.computeIfAbsent(keyParam, k -> new HashMap<>());
mapA.put(objectParam, mapA.getOrDefault(objectParam, 0) + 1);

De cette façon, nous avons mis à jour la valeur de « keyParam » dans la première carte sans appel direct à la méthode put ().

J'ai tendance à préférer lorsque le code est explicite et typiquement écrire un appel simple à « mettre ». Cependant, je me demande si je suis Overthinking et c'est quelque chose que nous concision gagnons pour avoir des références d'objet? Cela peut-il être écrit de manière tout aussi concise en Java qui prétend les objets sont immuables?

kutschkem:

Il peut être, mais pas dans ce cas.

Dans ce cas, le code sait ce qu'il fait, sans doute. Il est peut-être même pour l'objet BUT d'être mutable. La seule façon de contourner cela est de copier l'objet de valeur, muter, puis le mettre à nouveau. Cela pourrait être très coûteux dans certains programmes, aussi je ne suis pas sûr si le style est vraiment mieux, je ne pense pas qu'il serait plus facile à lire ou toujours moins sujette à l'erreur. Cela dépend de combien vous croyez en objets immuables en général.

Là où cela devient un problème quand les choses sont mutées qui ne devrait pas être. Mais cela n'a rien à voir avec des cartes en soi.

Par exemple:

Dans ce numéro sur github , une référence à une liste qui est censé être immuable est transmis à une partie du code qui ne muter, conduisant à au moins une fuite de mémoire dans ce cas.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=372880&siteId=1
conseillé
Classement