枚举类根据name获取value

枚举的概念

枚举是java中的一种特殊类型
枚举的作用:“是为了做信息的标志和信息的分类”
简单地说就是枚举是一个被命名的整数常数的集合,用于声明一组带标识符的常数

开发中用到枚举类的时候,会有根据name/type 获取枚举value的情况

简单的一个model

第一种方法:for循环查找

package me.zhengjie.aspect;

import org.apache.commons.lang3.StringUtils;

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

/**
 * 业务 枚举类
 */
public enum TestBizEnum {
    /**
     * 订单管理
     */
    ORDER_MANAGEMENT(0, "order management"),
    /**
     * 用户信息
     */
    USER_INFO(1, "user info"),
    /**
     * 部门管理
     */
    DEPT_MANAGEMENT(2, "dept management");


    private final Integer type;
    private final String biz;


    TestBizEnum(Integer type, String biz) {
        this.type = type;
        this.biz = biz;
    }

    public String getBiz() {
        return biz;
    }

    public Integer getType() {
        return type;
    }

    /**
     * findByType
     * @param type
     * @return
     */
    public static TestBizEnum findByType(Integer type) {
        //循环遍历对应的 TestBizEnum
        for (TestBizEnum item : values()) {
            if(item.getType().equals(type)) {
                return item;
            }
        }
        return null;
    }
    
}

第二种方法:静态内部类

package me.lcc.aspect;

import org.apache.commons.lang3.StringUtils;

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

/**
 * 业务 枚举类
 */
public enum TestBizEnum {
    /**
     * 订单管理
     */
    ORDER_MANAGEMENT(0, "order management"),
    /**
     * 用户信息
     */
    USER_INFO(1, "user info"),
    /**
     * 部门管理
     */
    DEPT_MANAGEMENT(2, "dept management");


    private final Integer type;
    private final String biz;


    TestBizEnum(Integer type, String biz) {
        this.type = type;
        this.biz = biz;
    }

    public String getBiz() {
        return biz;
    }

    public Integer getType() {
        return type;
    }

    static Map<Integer, TestBizEnum> varMap;

    //静态代码块在类加载时执行
    static {
        varMap = new HashMap<>(values().length);
        for (TestBizEnum item : values()) {
            varMap.put(item.type, item);
        }
    }

    /**
     * 通过type 在varMap里查找对应的枚举类
     * @param type
     * @return
     */
    public static TestBizEnum findByType(String type) {
        //如果没有对应type 默认返回null
        return StringUtils.isBlank(type) ? null : varMap.getOrDefault(type, null);
    }
}

通过静态代码块,在类加载的时候把所有的枚举类型存入到Map里面,然后再用get得到对应的枚举数据。

验证

测试:

/**
 * @author liuchengcheng
 * @Date 2022/11/8 17:54
 */
public class Test {

    public static void main(String[] args) {
        TestBizEnum bizEnum = TestBizEnum.findByType(0);
        System.out.println("biz: "+bizEnum.getBiz());
        System.out.println("type: "+bizEnum.getType());
        System.out.println("name: "+bizEnum.name());
    }
}

输出:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值