我想从枚举的字符串值(或任何其他值)中查找枚举.我试过下面的代码,但它不允许在初始化器中使用静态.有简单的方法吗?

public enum Verbosity {

    BRIEF, NORMAL, FULL;

    private static Map<String, Verbosity> stringMap = new HashMap<String, Verbosity>();

    private Verbosity() {
        stringMap.put(this.toString(), this);
    }

    public static Verbosity getVerbosity(String key) {
        return stringMap.get(key);
    }
};

推荐答案

使用 for each 枚举自动创建的valueOf方法.

Verbosity.valueOf("BRIEF") == Verbosity.BRIEF

对于任意值,从以下开始:

public static Verbosity findByAbbr(String abbr){
    for(Verbosity v : values()){
        if( v.abbr().equals(abbr)){
            return v;
        }
    }
    return null;
}

只有在探查器要求的情况下,才能在以后继续映射实现.

我知道它在迭代所有的值,但是只有3个枚举值,几乎不值得做任何其他的工作,事实上,除非你有很多值,否则我不会用Map来麻烦它,它已经足够快了.

Java相关问答推荐

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

Android -如何修复Java.time.zone. ZoneRulesExcept:未知时区ID:Europe/Kyiv

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

Cosmos Change Feed Process Lag远远超过收集中的记录数量

如何让JFileChooser(DIRECTORIES_ONLY)从FolderName中的空白开始?

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

按属性值从流中筛选出重复项

解释左移在Java中的工作原理

使用Spring和ActiveMQ的侦听器方法引发属性名称不能重复为空警告

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

如何在我的世界中为互动增加冷却时间?

buildDir:File!&#的getter解决方案是什么?39.被抛弃

Dijkstra搜索算法的实现

如何以编程方式保存workBench.xmi?

除0错误/抱歉我的句子是PT

如何制作回文程序?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

如何通过用户ID向用户发送私信

Java方法参数:括号中的类型声明?