2013-10-24 64 views
-1

我想將字符串轉換爲枚舉。但是如何?如何匹配並將字符串切換爲枚舉?

class Letter { 
    A, B, C 
} 

String letter = "A"; 
switch (letter) { 
    case Letter.A: //cannot convert from Letter to String 
    case Letter.A.toString(): //case expressions must be constant expressions 
    case Letter.C.name(): //case expressions must be constant expressions 
    default: 
} 
+2

http://stackoverflow.com/questions/604424/java-convert-string-to-enum 這是你想要的嗎? –

回答

5

首先Letter必須是枚舉:

enum Letter { 
    A, B, C 
} 

Letter letter = Letter.valueOf("A") 
// and just switch 
switch (letter) { 
    case A: 
    case B: 
    case C: 
} 
3

你可以這樣說:

String letter = "A"; 
switch (Letter.valueOf(letter)) { 
    case A: // No problem! 
    case B: 
    case C: 
    default: 
} 

Demo on ideone

+0

這不會工作我猜。 – shikjohari

+2

我們不能在案例中使用枚舉常量的限定名稱。他們必須是不合格的名字。所以這應該是'情況A:'。 – shikjohari

+0

@shikjohari修好了,謝謝! – dasblinkenlight

1

這樣做。

Letter l = Letter.valueOf("A"); 

Letter l = Enum.valueOf(Letter.class, "A"); 

switch (l) { 
    case A: 
    case B: 
    case C: 
    default: 
} 
2

作出這樣的第一枚舉,而不是 類替換該

Letter obj = Letter.valueOf(letter); 
switch (obj) { 
    case A: //cannot convert from Letter to String 
    case B: //case expressions must be constant expressions 
    case C: //case expressions must be constant expressions 
    default: 
1

如果字符串不與枚舉一些常量匹配,將引發java.lang.IllegalArgumentException: No enum constant 。嘗試下一個:

class Letter { 
    A, B, C; 
    public static Letter fromString(String str) { 
    if (str != null) { 
     for (Letter l : Letter.values()) { 
     if (l.toString().equals(str)) { 
      return l; 
     } 
     } 
    } 
    return null; 
    } 
}