如何从Java中的字符串值获取枚举值?推荐| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看活动链接

提问:如何从Java中的字符串值获取枚举值?

说我有一个枚举

public enum Blah {
A, B, C, D
}

并且我想找到一个字符串的枚举值,例如”A”它将是Blah.A。怎么可能做到这一点?

是Enum.valueOf()我需要的方法吗?如果是这样,我将如何使用它?

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

是的,Blah.valueOf(“A”)会给你的Blah.A。

请注意,该名称必须是精确匹配,包括大小写:Blah.valueOf(“a”)与Blah.valueOf(“A “)两抛出IllegalArgumentException。

静态方法valueOf()和values()是在编译时创建的,不会出现在源代码中。但是,它们确实出现在Javadoc中。例如,Dialog.ModalityType显示两种方法。

高分回答:

使用来自有效Java的Joshua Bloch的模式:

(为简便起见,将其简化)

enum MyEnum {
ENUM_1(“A”),
ENUM_2(“B”);

private String name;

private static final Map<String,MyEnum> ENUM_MAP;

MyEnum (String name) {
    this.name = name;
}

public String getName() {
    return this.name;
}

// Build an immutable map of String name to enum pairs.
// Any Map impl can be used.

static {
    Map<String,MyEnum> map = new ConcurrentHashMap<String, MyEnum>();
    for (MyEnum instance : MyEnum.values()) {
        map.put(instance.getName().toLowerCase(),instance);
    }
    ENUM_MAP = Collections.unmodifiableMap(map);
}

public static MyEnum get (String name) {
    return ENUM_MAP.get(name.toLowerCase());
}
复制代码

}

另请参阅:

使用实例枚举和映射的Oracle Java示例

Enum类型的静态块的执行顺序

如何从其String值查找Java枚举

文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/6…

作者建议:建议使用静态块来初始化放入map中,枚举是支持嵌套的,可以来实现更多易扩展的内容

给一个简单的接口枚举例子

public enum SaasApiEnum {

    /**
     * 企业创建
     */
    ORG_CREATE("企业创建", SaasApi.ORG_CREATE),

    ;
    SaasApiEnum(String name, String api) {
        this.name = name;
        this.api = api;
    }

    /**
     * 接口名
     */
    private final String name;
    /**
     * 接口地址
     */
    private final String api;

    /**
     * 枚举映射,快速解析用,key为枚举name()
     */
    private static final Map<String, SaasApiEnum> MAPPINGS = new HashMap<>(64);

    static {
        for (SaasApiEnum anEnum : values()) {
            MAPPINGS.put(anEnum.api, anEnum);
        }
    }

    /**
     * 解析给定的接口地址为当前枚举类型
     *
     * @param api 接口地址
     * @return 对应的枚举,or null if not found
     */
    public static SaasApiEnum resolve(String api) {
        return (api != null ? MAPPINGS.get(api) : null);
    }

    public String getName() {
        return name;
    }

    public String getApi() {
        return api;
    }
}
复制代码

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞? 求关注❤️ 求分享? 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享