zoukankan      html  css  js  c++  java
  • 一种根据value解释成枚举的有效方法

    有时候需要根据实际情况将某个值解释成一个枚举,而不是根据枚举的名称。如有时0是枚举Gender.MALE的值,1是枚举Gender.FEMALE的值;有时0、1又可以是另一个枚举的值,比如0表示CertType.IDENTITY_CARD,1表示CertType.PASSPORT。特别是查询数据库转换成枚举时。用if-else当然可以实现转换,但有一种通用的实现方法,如下:

    1、定义一个枚举基础接口,所有的枚举都实现这个方法

    public interface EnumBase {
        Object getValue();
    }

    2、定义一个具体枚举

    public enum AccountType implements EnumBase {
        /**
         * 公司账户
         */
        COMPANY(1),
    
        /**
         * 个人账户
         */
        INDIVIDUAL(2);
    
        private Integer value;
    
        private AccountType(Integer value) {
            this.value = value;
        }
    
        @Override
        public Integer getValue() {
            return value;
        }
    
    }

    3、实现通用的枚举解释方法

    public class EnumParser {
    
        public static Object parse(Class<?> typeClass, Object value) {
            Class<? extends Enum> enumTmp = typeClass.asSubclass(Enum.class);
            Object[] constants = enumTmp.getEnumConstants();
            int size = constants.length;
            for (int i = 0; i < size; i++) {
                Object tmp = constants[i];
                String val = String.valueOf(((EnumBase) tmp).getValue());
                if (val.equals(String.valueOf(value))) {
                    return tmp;
                }
            }
            return null;
        }
    }

    4、调用示例

    AccountType enumTest = (AccountType) EnumParser.parse(AccountType.class, 1);

    最终enumTest得到的就是

    AccountType.COMPANY
  • 相关阅读:
    序例化-Externalizable 接口
    线程休眠
    线程优先级
    const & 用法
    AcGePoint3d ads_point 转换
    结果缓冲区 resbuf具体用法
    选择集用法
    引用用法
    通过用户选择获取各种东西
    ARX中类型强制转换
  • 原文地址:https://www.cnblogs.com/BensonHe/p/4401968.html
Copyright © 2011-2022 走看看