Hallo zusammen,
ich habe in meinem Projekt zwei Sätze von Konstanten, die ich einander
zuordnen möchte. Ich habe auch schon eine Möglichkeit wie es geht, da es
aber mein erstes größeres Java-Projekt ist wollte ich einfach mal fragen
ob es vielleicht eine elegantere Lösung gibt.
Um das Problem verständlicher zu machen habe ich mal ein einfaches
Beispiel konstruiert:
Angenommen ich habe eine Klasse "Color" und eine Klasse "Farben" die
jeweils Frabbezeichnungen in englisch und deutsch enthalten. Mein Code
um die einander zuzuordnen wäre wie folgt:
Also für mich sieht das komisch aus. Was willst du denn überhaupt damit
bezwecken? Ist das einfach eine Übersetzungsfunktion zur Ausgabe? Oder
brauchst du das für etwas anderes?
Ja man könnte Übersetzungsfunktion dazu sagen. Die Konstanten gehören zu
jeweils unterschiedlichen Schnittstellen, deren Bedeutung ist aber an
sich gleich. Nur eben, dass die eine Schnittstelle nichts mit den
Ausdruck der anderen Schnittstelle anfangen kann.
Robert B. schrieb:> Ja man könnte Übersetzungsfunktion dazu sagen. Die Konstanten> gehören zu> jeweils unterschiedlichen Schnittstellen, deren Bedeutung ist aber an> sich gleich. Nur eben, dass die eine Schnittstelle nichts mit den> Ausdruck der anderen Schnittstelle anfangen kann.
Versuch es doch mit zwei java.util.Map : de2en und en2de . Oder einer
bidirektionalen Map, die gibt es aber nicht in den Standard-Libs von
Java.
HennesB schrieb:> private static final Map<Color, Farbe> COLOR_MAP => Collections.unmodifiableMap(new HashMap<Color, Farbe>() {{> put(Color.red, Farbe.rot);> put(Color.blue, Farbe.blau);> }});
Dir (und dem TO) ist aber hoffentlich klar, daß damit eine eigene
anonyme Klasse erzeugt wird, von der dann genau eine Instanz existiert.
Ich persönlich mag diese Konstruktion überhaupt nicht.
HennesB schrieb:> Kürzere Initilaisierung:>> private static final Map<Color, Farbe> COLOR_MAP => Collections.unmodifiableMap(new HashMap<Color, Farbe>() {{> put(Color.red, Farbe.rot);> put(Color.blue, Farbe.blau);> }});
Das sollte man meiden.
Man erzeugt eine anonyme Subklasse (und Instanz) von HashMap, kann ganz
schoen nach hinten los gehen wenn man nicht genau daruber im klaren ist
was da passiert.
Mit Google guava wuerde das so aussehen:
private static final Map<Color, Farbe> COLOR_MAP =
ImmutableMap.of(Color.red, Farbe.rot, Color.blue, Farbe.blau);