Java 如何根据枚举匹配和切换字符串?
我想将字符串转换为枚举。但是怎么做呢Java 如何根据枚举匹配和切换字符串?,java,enums,Java,Enums,我想将字符串转换为枚举。但是怎么做呢 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():
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:
}
首先,
字母
必须是枚举:
enum Letter {
A, B, C
}
Letter letter = Letter.valueOf("A")
// and just switch
switch (letter) {
case A:
case B:
case C:
}
您可以这样做:
String letter = "A";
switch (Letter.valueOf(letter)) {
case A: // No problem!
case B:
case C:
default:
}
.像这样做
Letter l = Letter.valueOf("A");
或
首先使用该枚举而不是类 取代这个
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:
如果字符串与枚举中的某个常量不匹配,则抛出
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;
}
}
这就是您想要的吗?我想这不会起作用。我们不能在案例中使用枚举常量的限定名称。它们必须是非限定名称。所以这应该是
案例A:
@shikjohari已修复,谢谢!
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;
}
}