Jira | ||||||||
---|---|---|---|---|---|---|---|---|
|
Overview
This document will outline when to use Guava's ImmutableMap/ImmutableSet and Java's Map.of and Set.of.
...
In Java there are unmodifiable maps. These are maps which are wrappers over a modifiable map. With these, if a change is made on the modifiable map then it is reflected in the unmodifiable map.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
Map<String, String> mutableMap = new HashMap<>(); Map<String, String> unmodifiableMap = Collections.unmodifiableMap(mutableMap); |
Guava's ImmutableMap, on the other hand, contains its own private data and doesn't allow modification to it. Therefore, the data cannot change in any way once an instance of the Immutable Map is created.
...
In Java 9, Map.of and Set.of were introduced. These are static factory methods which took take values on the fly and returned return Unmodifiable mapsmap/sets set which contained those values. contain those values. These unmodifiable map/set are immutable as they do not have a mutable map/set which can be accessed to modify the values within the map/set. Limitations to Map.of/Set.of is that they take upto 10 key value pairs for maps and 10 values for sets.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
Map<String, String> immutableMap = Map.of("A", "Apple", "B", "Ball", "C", "Car") |
...
To avoid any sonarcloud complains, use Map.of/Set.of when you want to create an Immutable immutable map/set on the flyset using set of entries that you provide. Even though an unmodifiable map/set is returned, this is still an immutable map/set as there is no mutable map/set, that can be changed.
From CPS codebase, Line 60 of the MutilpartFileUtil.java file found in cps/cps-rest/src/main/java/org/cps/rest/utils/
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
return Map.of(originalFileName, extractYangResourceContent(multipartFile)); |
This returns Map<String,String>. This is an immutable map because it does not have a mutable map which can be changed. For example, when an unmodifiable map was created above, a mutable map was supplied to it. If a change was made in the mutable map then the unmodifiable map will also reflect the same change.