• 枚举类根据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;
        }
        
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    第二种方法:静态内部类

    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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    通过静态代码块,在类加载的时候把所有的枚举类型存入到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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

  • 相关阅读:
    生信步骤|转录组mRNA数据的有参组装
    C++(八)——异常处理和转换函数
    java基于springboot+vue的宠物领养饲养交流管理平台nodejs前后分离
    分组统计查询
    【题解】同济线代习题一.6.5
    《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
    现在学编程还有出路吗?程序员的出路在哪里?
    Ceph RGW对象存储
    桥接模式Bridge
    visio将形状、图形、文字、符合进行任意角度旋转(已解决)
  • 原文地址:https://blog.csdn.net/qq_44086060/article/details/127755143