一种根据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

你可能感兴趣的:(value)