Uneori ajung la subtilitati de cod care nu-mi dau pace si ii musai sa aud opiniile altora. Stackoverflowul nu m-a lamurit, doar am aflat de mai multe posibilitati de a initializa un HashMap.
Am folosit pana azi double brace initializer-ul, ca-i comod. Stiu ca e numit asa doar din cauza aspectului si ca defapt Java nu are conceptul de “double brace”. Arata cam asa:
Map<String, String> someMap = new HashMap<String, String>() {{
put("luni", "salata"),
put("miercuri", "ciorba"),
put("vineri", "friptura");
}}
Bun, da cica chestia asta nu-i tocmai buna ca se creeaza o clasa anonima care nu poate fi garbage collected cat timp clasa mama e folosita. Iar eu folosesc mapul asta intr-o interfata care-i defapt un container de constante (nu o implementez nicaieri). Cat de rau poate fi asta?
Metoda mai clasica de a declara HashMap-ul si apoi folosirea unui static block initializer, evident, nu merge, fiind vorba de o interfata.
Ma irita faptul ca listele se pot initializa atat de usor inline cu Arrays.asList(), da pentru Map-uri parca e o intreaga stiinta.