Java Map in interfata folosita pentru constante?

java

#1

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.


(cosmos) #2

Desi poate ai gasit raspunsul. Sper ca te ajuta.


(Horia Coman) #3

Recent am mai băgat și eu Java pe la munca. Mare durere … Treburi simple sunt mare arta, vorba lui OP.

Mai ajuta Guava, că are niste utilitare pentru “tot ce ar trebui sa fie in stdlib dar nu e because $reasons”.


(cosmos) #4

check this
https://projectlombok.org/

var a fost adaugat in java 10. Este util.

In C# ai object initializer.

protected Dictionary<string, string> attribute = new Dictionary<string, string> { { "1", "cosmin-original from protected field" } };