Hutool 的 EnumUtil 有多香?Java 枚举操作从此告别繁琐

在 Java 开发中,枚举(Enum)绝对是个 “宝藏特性”—— 它能帮我们定义一组清晰的常量,还能给这些常量加字段、加方法,让代码更规范。但用过枚举的同学都知道:直接操作枚举时,想拿个名称列表、查个字段值、按条件找个枚举对象,写起来总有点啰嗦,代码又长又不好维护。

今天就给大家安利一个 “枚举操作神器”——Hutool 库中的EnumUtil工具类。有了它,搞定枚举那点事,一行代码就够了!

一、EnumUtil 是什么?

简单说,EnumUtil是 Hutool 专门为枚举 “量身定做” 的工具类。它就像一个 “枚举管家”,把我们平时操作枚举时的重复工作打包成了现成的方法,不管是查名称、取字段,还是按条件找枚举,都能轻松搞定。它最核心的能力,就是帮我们:
✅ 快速获取枚举的各种信息(名称、字段值)
✅ 灵活查找符合条件的枚举对象
✅ 生成各种映射关系,方便快速查询

二、这 6 个方法,解决 80% 的枚举问题

EnumUtil的方法不多,但每个都很实用。掌握这几个,日常开发基本够用了

  1. 一键获取所有枚举名称:getNames ()想遍历枚举的所有名称?不用手动循环了,一行代码直接拿列表:
// 获取MyEnum中所有枚举的名称列表
List<String> names = EnumUtil.getNames(MyEnum.class);

比如你的枚举是OrderStatus(订单状态:CREATED、PAID、SHIPPED),用这个方法直接得到[“CREATED”, “PAID”, “SHIPPED”],遍历、打印都方便。

  1. 批量提取枚举字段值:getFieldValues ()
    很多枚举会自定义字段(比如code、desc),想一次性拿到所有枚举的某个字段值?用它:
// 获取MyEnum中每个枚举的"code"字段值列表
List<String> codes = EnumUtil.getFieldValues(MyEnum.class, "code");

假设OrderStatus里每个状态有个code(100=CREATED、200=PAID),这行代码直接返回[100, 200, …],再也不用循环逐个取了。

  1. 按条件找枚举对象:getBy ()
    根据枚举的某个字段值找对应的枚举对象?用 lambda 表达式一键匹配:
// 查找"code"为200的OrderStatus枚举
OrderStatus paidStatus = EnumUtil.getBy(OrderStatus::getCode, 200);

不管你的字段是code、name还是自定义字段,只要用枚举类::get字段的格式,就能快速定位,比写 if-else 清爽 10 倍。

  1. 按条件取枚举字段值:getFieldBy ()
    如果不仅要找枚举,还要直接拿到它的另一个字段值?一步到位:
// 找到code=200的OrderStatus,再获取它的"desc"字段值
String paidDesc = EnumUtil.getFieldBy(OrderStatus::getDesc, OrderStatus::getCode, 200);

比如直接拿到 “已支付” 这个描述,不用先找枚举再调 getter,少写一行是一行~

  1. 枚举名称→枚举对象映射:getEnumMap ()
    想通过名称快速查枚举对象?生成一个映射表就行:
// 得到{名称: 枚举对象}的映射(顺序不变)
Map<String, OrderStatus> statusMap = EnumUtil.getEnumMap(OrderStatus.class);
// 直接通过名称获取枚举:statusMap.get("PAID") → 拿到PAID枚举

生成一次,后面随时用,比每次循环查找效率高多了。

  1. 枚举名称→字段值映射:getNameFieldMap ()
    如果需要通过名称直接查某个字段值(比如查 “PAID” 对应的 code),用这个:
// 得到{名称: 字段值}的映射,比如{"PAID": 200}
Map<String, Integer> nameCodeMap = EnumUtil.getNameFieldMap(OrderStatus.class, "code");
// 直接查:nameCodeMap.get("PAID") → 200

三、实际开发中,这些场景用它准没错

光看方法可能有点抽象,结合实际场景就懂了:

判断枚举值是否存在:

比如检查前端传的 “状态值” 是不是有效的枚举名称,用EnumUtil.contains(OrderStatus.class, “INVALID”),返回 false 就知道参数错了。

枚举值转换:

把枚举对象转成名称(EnumUtil.getName(OrderStatus.PAID) → “PAID”),或转成字段值(EnumUtil.getFieldValue(OrderStatus.PAID, “code”) → 200),接口返回数据时超方便。

批量处理枚举:

比如在下拉框展示所有枚举的 “名称 + 描述”,用getNames()拿名称,getFieldValues()拿描述,组合一下直接渲染,不用写重复代码。

总结

枚举操作虽小,但写多了也费时间。Hutool 的EnumUtil就像给枚举操作开了 “快捷键”—— 不用再写循环、不用再堆 if-else,一行代码搞定大部分需求,既能减少 bug,又能让代码更清爽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值