zoukankan      html  css  js  c++  java
  • 枚举转换工具类

    package tv.zhongchi.common.util;
    
    import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.math.BigDecimal;
    import java.util.Objects;
    
    /**
     * @ClassName EnumUtil
     * @Author ZhangRF
     * @CreateDate 2020/10/31
     * @Decription 枚举工具类
     */
    public class EnumUtil {
        /**
         * 值映射为枚举
         *
         * @param enumClass 枚举类
         * @param value     枚举值
         * @param method    取值方法
         * @param <E>       对应枚举
         * @return
         */
        public static <E extends Enum<?>> E valueOf(Class<E> enumClass, Object value, Method method) {
            E[] es = enumClass.getEnumConstants();
            for (E e : es) {
                Object evalue;
                try {
                    method.setAccessible(true);
                    evalue = method.invoke(e);
                } catch (IllegalAccessException | InvocationTargetException e1) {
                    throw ExceptionUtils.mpe("Error: NoSuchMethod in {}.  Cause:", e, enumClass.getName());
                }
                if (value instanceof Number && evalue instanceof Number
                        && new BigDecimal(String.valueOf(value)).compareTo(new BigDecimal(String.valueOf(evalue))) == 0) {
                    return e;
                }
                if (Objects.equals(evalue, value)) {
                    return e;
                }
            }
            return null;
        }
    
        /**
         * 根据value值获取enum对象
         *
         * @param enumClass
         * @param value
         * @param <E>
         * @return
         */
        public static <E extends Enum<E>> E getEnumByValue(final Class<E> enumClass, Object value) {
            try {
                return valueOf(enumClass, value, enumClass.getMethod("getValue"));
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 根据value值获取text
         *
         * @param enumClass
         * @param value
         * @param <E>
         * @return
         */
        public static <E extends Enum<E>> String getTextByValue(final Class<E> enumClass, Object value) {
            E e = getEnumByValue(enumClass, value);
            Object evalue;
            Method method = null;
            try {
                method = enumClass.getMethod("getText");
                method.setAccessible(true);
                evalue = method.invoke(e);
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e1) {
                throw ExceptionUtils.mpe("Error: NoSuchMethod in {}.  Cause:", e, enumClass.getName());
            }
            if (evalue != null) {
                return String.valueOf(evalue);
            }
            return null;
        }
    
        /**
         * 根据code值获取enum对象,如果code值相同,则获取第一个enum对象
         *
         * @param enumClass
         * @param value
         * @param <E>
         * @return
         */
        public static <E extends Enum<E>> E getEnumByCode(final Class<E> enumClass, Object value) {
            try {
                return valueOf(enumClass, value, enumClass.getMethod("getCode"));
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 根据code值获取text,如果code值相同,则获取第一个enum对象的text
         *
         * @param enumClass
         * @param value
         * @param <E>
         * @return
         */
        public static <E extends Enum<E>> String getTextByCode(final Class<E> enumClass, Object value) {
            E e = getEnumByCode(enumClass, value);
            Object evalue;
            Method method = null;
            try {
                method = enumClass.getMethod("getText");
                method.setAccessible(true);
                evalue = method.invoke(e);
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e1) {
                throw ExceptionUtils.mpe("Error: NoSuchMethod in {}.  Cause:", e, enumClass.getName());
            }
            if (evalue != null) {
                return String.valueOf(evalue);
            }
            return null;
        }
    
        /**
         * 根据code值获取enum对象
         *
         * @param enumClass
         * @param value
         * @param <E>
         * @return
         */
        public static <E extends Enum<E>> E getEnumBySubCode(final Class<E> enumClass, Object value) {
            try {
                return valueOf(enumClass, value, enumClass.getMethod("getSubCode"));
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 根据code值获取text,如果code值相同,则获取第一个enum对象的text
         *
         * @param enumClass
         * @param value
         * @param <E>
         * @return
         */
        public static <E extends Enum<E>> String getSubTextBySubCode(final Class<E> enumClass, Object value) {
            E e = getEnumBySubCode(enumClass, value);
            Object evalue;
            Method method = null;
            try {
                method = enumClass.getMethod("getSubText");
                method.setAccessible(true);
                evalue = method.invoke(e);
            } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e1) {
                throw ExceptionUtils.mpe("Error: NoSuchMethod in {}.  Cause:", e, enumClass.getName());
            }
            if (evalue != null) {
                return String.valueOf(evalue);
            }
            return null;
        }
    
    }
  • 相关阅读:
    谁能撼动C语言的霸主地位?是Go?是Rust?还是...
    从入职到快速晋升,程序员能够从底层逆袭,究竟是什么原因?
    我敢说,这8个Linux基础命令,学了绝不吃亏!(强烈推荐)
    想从程序员到百万高管,你一定要避开这3个坑!(年轻人必读)
    注意!在Linux中删除特殊名称文件有这6种方式!(建议收藏)
    事实证明!这10个Linux系统操作指令,简直 “不讲武德” ,请大家耗子尾汁!
    最适合单片机编程的高级语言,除了C语言,别无选择!
    “Help”!如何学习C和C++才不茫然,才不是乱学?
    C语言丨不要阅读此文,除非你已掌握二叉树的这些操作
    团队编程项目作业2-团队编程项目开发环境搭建过程
  • 原文地址:https://www.cnblogs.com/zhangrongfei/p/14101657.html
Copyright © 2011-2022 走看看