一种根据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
posted @ 2015-04-08 11:43  涂墨留香  阅读(1385)  评论(0编辑  收藏  举报