You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过字符串值查找Java枚举?Enum.valueOf()用法解析

根据字符串获取Java枚举值的实现方法

没错,Enum.valueOf()正是你需要的方法!它就是Java官方提供的、用来根据枚举名称字符串获取对应枚举实例的工具方法,完美匹配你的需求。

基本用法示例

针对你定义的Blah枚举,直接这样用就可以:

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

public class EnumDemo {
    public static void main(String[] args) {
        // 要匹配的字符串
        String targetStr = "A";
        // 使用Enum.valueOf()获取对应枚举值
        Blah matchedEnum = Enum.valueOf(Blah.class, targetStr);
        
        System.out.println(matchedEnum); // 输出结果:A(或Blah.A,取决于toString实现)
    }
}

关键细节说明

  • 参数要求:第一个参数是枚举的Class对象(比如Blah.class),用来指定要操作的枚举类型;第二个参数是枚举值的精确名称字符串,注意大小写必须完全和枚举定义一致——比如你传"a"而不是"A"的话,会直接抛出IllegalArgumentException。
  • 异常处理:如果传入的字符串不存在于枚举的定义中,Enum.valueOf()也会抛出IllegalArgumentException。如果你的输入字符串可能不合法,建议用try-catch块捕获异常,做容错处理:
String targetStr = "E";
try {
    Blah matchedEnum = Enum.valueOf(Blah.class, targetStr);
} catch (IllegalArgumentException e) {
    // 自定义异常处理逻辑,比如返回默认值或提示错误
    System.out.println("找不到对应的枚举值:" + targetStr);
}

扩展:忽略大小写的匹配(可选)

如果你的场景需要忽略大小写来匹配字符串,Enum.valueOf()本身不支持这种操作,这时候可以自己写一个简单的工具方法:

public static Blah getBlahIgnoreCase(String name) {
    // 遍历所有枚举值,忽略大小写比较名称
    for (Blah blah : Blah.values()) {
        if (blah.name().equalsIgnoreCase(name)) {
            return blah;
        }
    }
    // 没找到的话抛出异常或返回默认值
    throw new IllegalArgumentException("不存在名称为" + name + "的Blah枚举值");
}

内容的提问来源于stack exchange,提问作者Muhammad Saad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:15:19