通过枚举中定义的code获取对应的枚举对象
1、枚举接口
public interface IEnum { /** * 获取编码 * * @return */ public String getCode(); /** * 获取说明 * * @return */ public String getDesc();}2、枚举工具类
public class EnumsUtil { /** * 获取枚举 * * @param clazz * @param code * @return */ public static3、定义一个枚举T valueOfIgnoreCase(Class clazz, String code) { return valueOf(clazz, code, true); } /** * 获取枚举,区分大小写 * * @param clazz * @param code * @return */ public static T valueOf(Class clazz, String code) { return valueOf(clazz, code, false); } /** * 获取枚举,区分大小写 * * @param clazz * @param code * @param ignoreCase * @return */ private static T valueOf(Class clazz, String code, boolean ignoreCase) { //得到values T[] enums = values(clazz); if (enums == null || enums.length == 0) { return null; } for (T t : enums) { if (ignoreCase && t.getCode().equalsIgnoreCase(code)) { return t; } else if (t.getCode().equals(code)) { return t; } } return null; } /** * 获取枚举集合 * * @param clazz * @return */ public static T[] values(Class clazz) { if (!clazz.isEnum()) { throw new IllegalArgumentException("Class[" + clazz + "]不是枚举类型"); } //得到values return clazz.getEnumConstants(); }}
public enum UserType implements IEnum { /** 超级管理员 */ SUPER_ADMIN("super_admin", "超级管理员"), /** 管理员 */ ADMIN("admin", "普通管理员"), /** 一般用户 */ USER("user", "一般用户"); /** 编码 */ private String code; /** 说明 */ private String desc; UserType(String code, String desc) { this.code = code; this.desc = desc; } @Override public String getDesc() { return desc; } @Override public String getCode() { return code; }}4、测试
@Test public void test_valueOf() { UserType userType = EnumsUtil.valueOf(UserType.class, "user"); Assert.assertTrue(userType == UserType.USER); } @Test public void test_valueOfIgnoreCase() { UserType userType = EnumsUtil.valueOfIgnoreCase(UserType.class, "user"); Assert.assertTrue(userType == UserType.USER); } @Test public void test_valueOfNull() { UserType userType = EnumsUtil.valueOf(UserType.class, "User"); Assert.assertTrue(userType == null); }