我想我还没有在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
我做错了什么?
枚举测试运算符。NOT_EQUAL是枚举测试算子的一个实例。不能将其与字符串进行比较。
您可以均匀地比较EnumTestOperator。不相等。toString()带有字符串,但不在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");
}
您正在比较不兼容的类型。它类似于语句
"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
放入开关
将引发NullPointerException
。
我是MVC编程的新手。所以我用的是play框架。 获取未捕获的引用Error:未定义MODERATED
问题内容: 我正在用Java制作轮盘赌(我自己的版本),而玩家可以打赌的类型之一就是选择将要滚动的颜色。(偶数是黑色,奇数是红色)。有没有一种方法可以使用switch语句将字符串与枚举进行比较? 这就是我想要得到的,但这并不是让我在switch语句中使用枚举“颜色”。 问题答案: 您必须具有要在其上进行切换的枚举类型的实例(其 成员 )。您正在尝试打开Enum类本身,这是没有意义的构造。所以你可能
它在两个case语句上都显示错误“case表达式必须是常量表达式”。 那么我如何在swtich语句中使用字符串枚举呢?
问题内容: 我试图在z DBOpenHelper扩展SQLOpenHelper类中编写一个方法。它应该评估数据库中是否存在相同名称的条目。 这是Contact类的相关部分: 现在这是奇怪的事情: 方案A:其中和 等于false。Eclipse调试器显示名称的foo和cname的foo具有不同的id。这两个变量都按之前在代码中所示填充。 方案B:像这样加载变量的地方: 方案C:等于true …但是…
问题内容: 我有一个程序正在制作,当用户输入一种心情时,它将在此基础上输出报价。我需要告诉程序 问题是,我不知道如何使程序识别输入并基于该输出文本…这是到目前为止我所拥有的代码。 问题答案: 首先,看起来您正在处理错误的变量。我想你打算比较。 处理字符串时,请始终使用而不是。比较参考值(通常不可靠),同时比较实际值。 将您的字符串转换为全部大写或全部小写也是一个好习惯。在本示例中,我将使用小写字母
问题内容: 在java中如何比较字符串,使用==还是equals 问题答案: == 测试引用是否相等(它们是否是同一对象)。 .equals() 测试值是否相等(在逻辑上是否为“相等”)。 String.contentEquals() 将的内容String与任何内容进行比较CharSequence(从Java 1.5开始可用)。 因此,如果要测试两个字符串是否具有相同的值,则可能要使用Object