![](/img/trans.png)
[英]How to compare enum value to scanner input in java for switch statement
[英]How to compare string to enum in a switch statement in Java?
我想我还没有在Java中得到Enum
的概念。
我试图将字符串与枚举中的特殊字符进行比较的枚举条目进行比较。
package com.stackoverflow.tests;
public class EnumTest {
enum EnumTestOperator {
EQUAL("=="),
NOT_EQUAL("!=");
private String value;
private EnumTestOperator(String value) {
this.value = value;
}
public String toString() {
// will return == or != instead of EQUAL or NOT_EQUAL
return this.value;
}
}
public static void main(String[] args) {
String line;
line = "<>";
line = ".ne.";
line = "!=";
// Operator
switch(line) {
// case "!=":
case EnumTestOperator.NOT_EQUAL:
System.out.println("Not Equal");
break;
default:
System.out.println("Something else");
break;
}
}
}
但在行中:
case EnumTestOperator.NOT_EQUAL:
我收到编译器错误:
Type mismatch: cannot convert from EnumTest.EnumTestOperator to String
我究竟做错了什么?
您正在比较不兼容的类型。 类似于声明
"some string" == EnumTestOperator.NOT_EQUAL
您将字符串值与枚举常量进行比较。
只需停止使用枚举并将它们声明为字符串常量即可:
private static final String EQUAL = "==";
private static final String NOT_EQUAL = "!=";
然后,您可以在开关/外壳中使用它们。
另一个解决方案是根据您的输入查找枚举常量。 将此添加到您的枚举:
public static EnumTestOperator byValue(String val){
for(EnumTestOperator en:values()){
if(en.value.equals(val)){
return en;
}
}
return null;
}
然后使用如下函数:
EnumTestOperator en = EnumTestOperator.byValue(line);
switch(en) {
case NOT_EQUAL:
System.out.println("Not Equal");
break;
default:
System.out.println("Something else");
break;
}
不幸的是,您将不得不以不同的方式处理null
情况,因为将null
放入switch
中将引发NullPointerException
。
EnumTestOperator.NOT_EQUAL
是实例EnumTestOperator
。 您无法将其与String
进行比较。
您甚至可以将EnumTestOperator.NOT_EQUAL.toString()
与String
进行比较,但不能在case
语句中进行比较( case
语句需要Java中的常量表达式)。
但是您可以改为对EnumTestOperator
常量进行迭代:
public static EnumTestOperator find(String strValue) {
for(EnumTestOperator operator : EnumTestOperator.values()) {
if(operator.toString().equals(strValue)) {
return operator;
}
}
throw new IllegalArgumentException("No matching value");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.