java - 返回正确的枚举而不使用 if

标签 java enums

如果出现以下情况,我有任务更改此设置:

if (userDecision.equalsIgnoreCase("D")) {
    return DirectoriesActivity.DELETE;
} else if (userDecision.equalsIgnoreCase("R")) {
    return DirectoriesActivity.REPLACE;
} else {
    return DirectoriesActivity.ADD_NEW_CONTENTS;
}

在某些内容上,将仅返回枚举而不使用 if。我必须使用一些枚举属性,但我不知道是哪一个:/这是我的枚举:

public enum DirectoriesActivity {
    DELETE,
    REPLACE,
    ADD_NEW_CONTENTS;
}

我尝试做这样的事情:

public enum DirectoriesActivity {
    DELETE ("D"),
    REPLACE ("R"),
    ADD_NEW_CONTENTS ("A");

    private String directoriesActivityCode;
    private DirectoriesActivity(String directoriesActivityCode)    {
        this.directoriesActivityCode = directoriesActivityCode;
    }

    public DirectoriesActivity getEnum(String x){
        //no idea what to do here
    }
}

或者也许有人有其他想法?

最佳答案

您可以添加 map 查找。

static Map<String, DirectoriesActivity> lookup = new HashMap<>();

static {
    // iterate over all the values and 
    // put the value we want to lookup as the key to the map.
    for(DirectoriesActivity da: values())
        lookup.put(da.directoriesActivitCode, da);
}

public static DirectoriesActivity lookup(String s) {
    // lookup the map we built in the static block.
    return s == null ? null : lookup.get(s.toUppercase());
}

这样您就可以添加任意数量的代码,而无需更改代码。

关于java - 返回正确的枚举而不使用 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134928/

相关文章:

Python enum.Enum 创建别名而不是新值

java - Jython 网络应用性能

java - Mac OS X 如何确定应用程序需要 Java?

Java Swing JScrollPane 显示的输出与书中显示的不同。行标签在 Java 中消失了

Java Enum 未使用字段警告

c# - 在C#中使用枚举

c++ - 带有枚举解释的隐式非运算符(!)?

java - 如何在 Android 中打开具有 Uri 的文件?

java - 使用 Apache POI 库读取 Excel (xlsx) 文件会引发 NullPointerException

c# - System.Text.Json - 将第三方枚举数组序列化为字符串数组