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;
        }
    
    }
  • 相关阅读:
    基于term vector深入探查数据
    oracle 行转列
    oracle 统计成绩
    最全最新个税计算公式---今天你税了吗?
    .net反混淆脱壳工具de4dot的使用
    使用ILSpy软件反编译.Net应用程序的方法及注意事项
    EmguCV使用Stitcher类来拼接图像
    从睡姿就可以看出你的性格,据说非常准,快存!
    分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。
    【转载】关于.NET下开源及商业图像处理(PSD)组件
  • 原文地址:https://www.cnblogs.com/zhangrongfei/p/14101657.html
Copyright © 2011-2022 走看看