Variablen Instanz von Enum zur Laufzeit erstellen und zuweisen

Bruno

Mitglied
Hallo,

ich habe hier einige Klassen, deren Setter ein zuvor definiertes Enum entgegennimmt. zB:
Java:
public enum Bottles { Heineken, Becks, Clausthaler }
und
Java:
public enum Barrels { Franziskaner, Jever, Oettinger }

Über ein GUI erhalte ich nur die String-Werte. Eine Zuweisung, deren Wert beim Kompilieren bekannt ist, funktioniert ja so:
Code:
setBeer(Bottles.Becks);
Aber wie veranstalte ich das, wenn ich erst zur Laufzeit erfahre, welche Klasse und welchen Wert ich speichern will?

Und ist es möglich, den Wert in einer Variablen zwischenzuspeichern? Bei
Code:
private Bottles myBottle = Bottles.Becks
instanziere ich ja
Code:
myBottle
sofort als
Code:
Bottles
. Kann ich auch ein
Code:
Object myBottle
instanzieren und darin später ein
Code:
Bottles
oder
Code:
Barrels
speichern?

Danke vorab!

Gruß Bruno
 
eine Variable vom Typ Object geht natürlich und da kannst du jederzeit beliebige Objekte speichern, also auch Enum-Werte beliebiger Enums,
den Typ der Variablen kannst du aber nicht mehr auf Bottles oder Barrels setzen oder so,

das brächte dir auch nichts, in so variablen Gebieten hast du keine Verwendung dafür
mit Cast kannst du wiederum Methoden aufrufen, die einen bestimmten Typ benötigen

von einen String kannst du mit Klassenname.valueOf() auf den zugehörigen Enumwert kommen,
Class.forName() liefert die Klasse (edit: wobei dann valueOf() nicht da ist oder ich gerade nicht genau weiß was passt,
Alternative: class.getEnumConstants() liefert alle Enum-Werte, die in einer Schleife durchgehen, vergleichen

edit2: enumConstantDirectory() hilft weiter, bzw. Enum.valueOf(Class<T> enumType, String name) verwendet dieses)

---------

oder auch mit if/ else unterscheiden, oder in Maps alles ablegen
Java:
map.put("Bottles.Heineken",Bottles.Heineken);
...
x = map.get(typ+"."+untertyp);
usw.
 
Zuletzt bearbeitet von einem Moderator:
Alternative: class.getEnumConstants() liefert alle Enum-Werte, die in einer Schleife durchgehen, vergleichen
Danke, werde ich im Hinterkopf behalten, falls meine jetzige Lösung nicht rund läuft. Denn
edit2: enumConstantDirectory() hilft weiter, bzw. Enum.valueOf(Class<T> enumType, String name) verwendet dieses)
genau das habe ich hier auch gelesen und testweise implementiert:
Java:
Enum myBeer = Enum.valueOf((Class<? extends Enum>) Class.forName(typeOfStorage), beerName);

Die Werte werden mittels einer HashMap übergeben und der neue Wert wird auch dahin zurückgespeichert. Deshalb kann ich im Debugger vergleichen, welche Einträge da vorher drinliegen und welche später. Und bisher sieht es mit diesem Codeschnipsel sehr gleich aus.

Da ich nicht der absolute Java-Durchsteiger bin, wird wohl erst die korrekte Funktionsweise des Programms zeigen, ob das hier alles richtig läuft.

Danke, Bruno
 

Neue Themen


Zurück
Oben