2010-05-14 13 views
7

Ich habe eine Enum definiert, welche Methode Rückgabetyp wie „String“ enthält, Float, List, Double usw.Aufzählungen, den Einsatz in Schalt Fall

werde ich es in Schaltergehäuse Aussagen werden. Zum Beispiel meine Enum ist

public enum MethodType { 
    DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG; 
} 

In einer Property-Datei, ich habe Paare Schlüsselwert wie folgt. Test1 = String Test2 = Doppel

In meinem Code bekomme ich den Wert für den Schlüssel. Ich muss den VALUE in Switch Case verwenden, um den Typ zu bestimmen, und basierend darauf muss ich eine Logik implementieren. Zum Beispiel wie etwas, das

switch(MethodType.DOUBLE){ 
    case DOUBLE: 
     //Dobule logic 
} 

Kann mir bitte jemand helfen, dies zu implementieren?

Antwort

17

ich denke, das ist das, was Sie suchen:

public class C_EnumTest { 
    public enum MethodType { 
     DOUBLE,LIST,STRING,ARRAYLIST,FLOAT,LONG; 
    } 
    public static void main(String[] args) { 
     String value = "DOUBLE"; 
     switch(MethodType.valueOf(value)) { 
     case DOUBLE: 
      System.out.println("It's a double"); 
      break; 
     case LIST: 
      System.out.println("It's a list"); 
      break; 
     } 
    } 
} 

für nicht Fall empfindlich Sie MethodType.valueOf(value.toUpperCase()) tun könnte.

+0

Genau das habe ich gesucht. Ist es möglich, für den MethodType.valueOf eine Ignorierungsprüfung durchzuführen? – Apps

+0

Vielen Dank für die Hilfe. – Apps

+0

Gerade hinzugefügt eine Zeile für nicht Groß-und Kleinschreibung. – tangens

5

Sie haben die Enumeration definiert, aber Sie müssen eine Variable definieren, die diesen Typ ist. Wie folgt aus:

public enum MethodType { ... } 

public MethodType myMethod; 

switch (myMethod) 
{ 
    case MethodType.DOUBLE: 
     //... 
     break; 
    case MethodType.LIST: 
     //... 
     break; 
//... 
} 

Edit:

Zuvor diese Schnipsel verwendet var als Variablennamen, aber das ist ein reserviertes Schlüsselwort. Geändert zu myMethod.

+0

Aber in meinem Fall werde ich den Wert basierend auf dem Schlüssel aus der Eigenschaftendatei erhalten. Zum Beispiel wird mein Wert "String" sein, ich muss das im Switchfall verwenden. Gibt es einen alternativen Ansatz dazu? Könntest du mich bitte wissen lassen? – Apps

+0

Ich bin mir nicht ganz sicher, ob ich verstehe, was du meinst. Wenn Sie nach Schlüssel/Wert-Paaren suchen, sollten Sie stattdessen ein Wörterbuch verwenden. Wenn Sie sehen möchten, welchen Typ ein Wert hat, zum Beispiel wenn var * ein Double ist, wäre der Code 'if (var ist double) {// tu stuff}' – JYelton

3

Sie brauchen keinen Schalter überhaupt (das in Java ist vielleicht btw so nicht funktioniert): Offensichtlich wollen Sie einige null Kontrollen, eine bessere Fehlerbehandlung, etc. hinzufügen

public enum MethodType { 

     String,LONG,DOUBLE,THING; 

     static MethodType fromString(String x) throws Exception { 
      for (MethodType currentType: MethodType.values()){ 
       if (x.equals(currentType.toString())){ 
        return currentType; 
       } 
      } 
      throw new Exception("Unmatched Type"); 
     } 
    } 
+0

Und es gibt auch die Einschränkung, dass die Zeichenkette dem entspricht Darstellung des methodType. Wenn das ein Problem ist, können Sie eine abstrakte stringRepresentation-Methode definieren und sie für jeden MethodType implementieren – StevenWilkins

+1

Dies ist genau das, was die 'valueOf (String)' statische Methode aller enums tut, z. 'MethodType.valueOf (" DOUBLE ") == MethodType.DOUBLE'. – ZoogieZork

+0

@ZoogieZork - Du hast Recht, ausgezeichneter Punkt, völlig verrückt meine Gedanken. – StevenWilkins

5

Dies kann ein wenig näher sein, was Sie brauchen. Sie können die propertyName -Eigenschaft so einrichten, dass sie in diesem Fall benötigt wird: