当前位置: 首页 > 面试题库 >

如何从其String值查找Java枚举?

谭宜
2023-03-14
问题内容

我想从其字符串值(或可能的任何其他值)中查找一个枚举。我已经尝试了以下代码,但是在初始化程序中不允许使用静态代码。有没有简单的方法?

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);
    }
};

问题答案:

使用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;
}

仅当你的探查器告诉你以后再继续执行Map实施。

我知道它会遍历所有值,但是仅使用3个枚举值几乎是不值得的,实际上,除非你有很多值,否则我不会为Map烦恼,它会足够快。



 类似资料:
  • 问题内容: 假设有一个名为Type的简单枚举定义如下: 找到具有给定值的正确枚举通常是通过带for循环的静态方法(假设该方法在枚举内部定义)完成的,例如: 我认为用Stream API表示的功能等效如下: 我们怎么能写得更好,更简单?这段代码让人感觉很强迫,而且不太清楚。该特别是似乎笨重和滥用,因为它不累积什么,不进行计算,并始终直接返回(提供过滤器返回一个值- 如果不说的显然是个灾难),更何况是

  • 假设有一个名为 Type 的简单枚举,定义如下: 为给定的<code>s</code>找到正确的枚举是用带有for循环的静态方法完成的(假设该方法在枚举中定义),例如: 我认为用Stream API表达的功能等价物是这样的: 我们怎样才能写得更好,更简单?这段代码感觉是被迫的,不是很清楚。尤其显得笨拙和滥用,因为它不积累任何东西,不执行任何计算,总是简单地返回(前提是过滤器返回一个值 - 如果它没

  • 问题内容: 我有一个枚举,看起来像: 我有一个看起来像的测试班 输出为: 代替 我不确定这里出什么问题了吗?? 问题答案: 您需要 重写枚举的方法:

  • 问题内容: 假设我有一个包含100个值的枚举。为了简单起见,请采用以下示例: 我想创建一个公共方法,以将具有已知格式(例如“ string1”,“ string2” …)的字符串转换为适当的枚举值CODE_1,CODE_2 …通常是通过遍历所有值来完成的,如果找到匹配项,返回该枚举值。 但是,我担心规则循环遍历所有值。这可能是一个巨大的瓶颈吗?如果不是100个元素而是1000个呢? 作为我自己的练

  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S

  • 问题内容: 我无法使用从常量中获取的枚举作为注释中的参数。我收到此编译错误:“注释属性[attribute]的值必须是枚举常量表达式”。 这是枚举代码的简化版本: 对于注释: 和班级: 该错误仅在方法B的“ theEnum = MYENUM_CONSTANT”中显示。字符串和int常量对于编译器是可以的,但Enum常量不是,即使它的值与methodA上的值完全相同。在我看来,这是编译器中缺少的功能