与enum匹配的Java字符串

时间:2015-05-22 13:11:18

标签: java string-matching

我遇到一个奇怪的问题,当检查两个看似相同的字符串时,if语句没有评估为true。我有以下方法:

public void render(Cell.Context context, TaskSchedule object, SafeHtmlBuilder sb) {
    String taskName = getValue(object);
    System.out.println(taskName);
    if (String.valueOf(ServerTask.RUN_CYME_EXPORT).equals(taskName)) {
                taskName = "    " + taskName;
            }
}

taskName将打印出“Run CYME Export”,枚举ServerTask如下所示:

public enum ServerTask {
    .....
    RUN_CYME_EXPORT("Run CYME Export"),
    .....
}

打印的字符串和枚举中的字符串是完全相同的拼写。我也试过这个无济于事:

if(String.valueOf(ServerTask.RUN_CYME_EXPORT).equals(taskName)){
    .....
}

3 个答案:

答案 0 :(得分:4)

枚举应该是这样的:

public enum ServerTask {
    RUN_CYME_EXPORT("Run CYME Export");
    private final String value;
    private ServerTask(String aValue) {this.value = aValue;}
    public String value() {return value;}
}

所以从外面看:

if (ServerTask.RUN_CYME_EXPORT.value().equals(taskName)) {
   // whatever
}

答案 1 :(得分:2)

您应该比较包含在枚举中的字符串,而不是比较值。

答案 2 :(得分:0)

查看ServerTask的构造函数,它将把参数值赋给某个​​字段。

如果要与该变量的值进行比较,则需要调用相应的getter。

String.valueOf(ServerTask.RUN_CYME_EXPORT)可能返回字符串" RUN_CYME_EXPORT"