Java 与枚举匹配的字符串

Java string matching with enum

我遇到一个奇怪的问题,当检查两个看似相同的字符串时,if 语句的计算结果不为真。我有以下方法:

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)){
    .....
}

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

查看 ServerTask 的构造函数,它会将参数值分配给某个字段。

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

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

枚举应该是这样的:

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
}