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

如何使用自定义Java枚举优化整数字符串映射场景的if-else逻辑

可以,完全可以用你定义的枚举彻底替换掉这段冗长的if-else判断

首先提一句你贴的枚举代码有个小笔误:你写的string2(3)和原逻辑里var == 3对应string3的映射不匹配,应该调整为string3(3)。

完整的枚举实现只需要补全字段、构造方法、值查找逻辑即可,推荐用静态缓存映射的写法,查找效率更高:

import java.util.HashMap;
import java.util.Map;

public enum MyValues {
    string1(1, "string1"),
    string3(3, "string3"),
    string4(4, "string4");

    private final int code;
    private final String matchString;
    // 类加载时就初始化好code和枚举实例的映射,只执行一次
    private static final Map<Integer, MyValues> CODE_TO_INSTANCE = new HashMap<>();

    static {
        for (MyValues item : MyValues.values()) {
            CODE_TO_INSTANCE.put(item.code, item);
        }
    }

    MyValues(int code, String matchString) {
        this.code = code;
        this.matchString = matchString;
    }

    public static String getMatchString(int var) {
        MyValues instance = CODE_TO_INSTANCE.get(var);
        // 匹配不到就返回默认值,对应原来的else分支
        return instance == null ? "no string found" : instance.matchString;
    }
}

原来整段if-else逻辑,替换成一行调用就行:

finalString = MyValues.getMatchString(var);

这种写法的优势

  • 维护成本低:后续新增、修改映射规则,只需要在枚举类里加对应枚举实例即可,不需要改动业务判断代码,不会出现改漏分支的问题
  • 性能稳定:静态Map的查找时间复杂度是O(1),不会随着分支变多导致判断耗时增加,比长串if-else逐个判断的效率更高
  • 逻辑收敛:所有值和字符串的映射关系都集中在枚举里统一管理,不会散落在项目的各个业务代码块里

如果你的枚举分支数量很少(比如就3、4个且不会频繁变动),也可以不用静态Map,直接遍历枚举值匹配,写法更简单:

import java.util.Arrays;

public static String getMatchString(int var) {
    return Arrays.stream(MyValues.values())
            .filter(item -> item.code == var)
            .findFirst()
            .map(item -> item.matchString)
            .orElse("no string found");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.22 16:12:25