# enum in String und wieder zurückwandeln



## Guest (7. Sep 2007)

Hallo,

ich habe eine Liste von Suchkriterien welche enums sind(also id, name, city).
In einer Combobox möchte ich die in deutsch anzeigen und habe mir deswegen eine Methode geschrieben. welche eine variable searchCriteria bekommt und einen String mit der deutschen Bezeichnung zurückgibt. Die schreibe ich dann in die Liste. das funzt auch ganz gut. Jetzt brauch ich allerding auch den ausgewählten Wert wieder zurück als enum. Nur kann ich ja in einer switch case Abfrage keinen string abgeben und eine if schleife mit 8 pfaden finde ich auch nicht so besonders. elche Möglichkeit gibt es noch das prolem zu lösen also das umwandeln von enum in String und wieder zurück. 
An der enum Klasse kann aber nix verändert werden.


----------



## SlaterB (7. Sep 2007)

dafür brauchst du eine Map, die von String auf Enum abbildet,
falls der String = Enum.toString() ist, dann nimm die vorgegebe Operation
DeineEnum e = DeineEnum.valueOf(string);

falls du einen anderen String hast kannst du entweder den als toString() ausgeben (toString() überschreiben)
oder musst eine eigene Hilfsstruktur wie eine HashMap aufbauen


----------



## Guest (7. Sep 2007)

BTW: If-Schleifen GIBT ES NICHT!!


----------



## Gast (7. Sep 2007)

Hallo 
@Gast das es keine If-Schleifen, sondern nur Verzweigungen gibt weiß ich.  

@Slater also das mit der toString Methode geht nicht, weil die enum Klasse nur die suchkriterein enthält, also, id, name, city usw. 
Wenn ich das ganze in eine Map packe. und den enum als Schlüßel und die dt. Bezeichnung als Wert. kann ich ja einfach auf den wert zugreifen.
Aber  wie komme ich dann vom Wert wieder an den Schlüßel?


----------



## SlaterB (7. Sep 2007)

nur indem du eine Map Wert (String)->Enum anlegst,


wie machst du es denn bisher manuell?
falls du einen Teilspring ausliest (in den ersten 20 Zeichen stehen die allgmeinen Suchkriterien),
dann bezieht sich das ganze Konzept natürlich nur auf diesen Teilstring


----------



## Marco13 (7. Sep 2007)

Anonymous hat gesagt.:
			
		

> An der enum Klasse kann aber nix verändert werden.



Die Frage "Warum???" erspare ich dir jetzt mal, mache dir aber ein bißchen den Mund wässerig (so, dass du sie vielleicht DOCH änderst) : Wenn du bei denen enums die toString-Methode vernünftig überschreibst, kannst du sie _direkt_ in die ComboBox packen - und bei getSelectedItem bekommst du dann das enum-Objekt zurück. Sehr praktisch.

```
enum Type
{
    FIRST("Der erste"),
    SECOND("Der zweite");
  
    private String description;
     
    Type(String description)
    {
        this.description = description;
    }

    public String toString()
    {
         return description;
    }
}
```


----------



## Gast (7. Sep 2007)

Hallo, ja das Problem ist, ich greife auf die enum Klasse aber nur zu. Die ist aber nicht von mir, deswegen kann ich sie nicht ändern. ich weiß das das einfacher wäre. Wie gehts denn mit der map?


----------



## Gast (7. Sep 2007)

@Slater
Also bisher habe ich halt nur die Methode getStringForValue(enum search) in der frage ich in einer switch case Abfrage ab, welches enum und gebe dann den String zurück. Nur geht das ja wie gesagt nur in die eine Richtung. 

Und wenn ich eine map nehme. kann ich ja eigentlich auch immer nur in eine richtung abfragen also die richtung welche Schlüßel ist.

Es ist kein Teilstring, also ein enum z.b city steht für die bezeichnung stadt.

Was meinst du mit ?


			
				SlaterB hat gesagt.:
			
		

> ur indem du eine Map Wert (String)->Enum anlegst,


----------



## SlaterB (7. Sep 2007)

> in der frage ich in einer switch case Abfrage ab, welches enum und gebe dann den String zurück. Nur geht das ja wie gesagt nur in die eine Richtung. 


um den Rückweg zu bestimmen ist es essentiell zu wissen, wie dieser String aufgebaut ist, was davon aus der Enum kommt usw.,
ohne Beispiele geht es nicht voran

> Was meinst du mit ? 

ganz allgemein ohne besondere Ausnutzug sieht es so aus:

du hast bisher z.B.

```
for (Ergebnisse/ Auswahlmöglichkeiten) {
  Enum x = ..;
  String dazu = getStringForValue(x);
  füge in Combobox ein usw
}

später:

String y = get aus Combobox;
Enum dazu = ??? // Problem
```

mit Map sieht es dagegen so aus:

```
for (Ergebnisse/ Auswahlmöglichkeiten) {
  Enum x = ..;
  String dazu = getStringForValue(x);
  füge in Combobox ein usw

  hashmap.put(dazu,x);  // gespeichert: String dazu mappt auf Enum x
}

später:

String y = get aus Combobox;
Enum dazu = map.get(y);
```


----------

