通过枚举中定义的code获取对应的枚举对象
1、枚举接口
public interface IEnum {
/**
* 获取编码
*
* @return
*/
public String getCode();
/**
* 获取说明
*
* @return
*/
public String getDesc();
}
2、枚举工具类
public class EnumsUtil {
/**
* 获取枚举
*
* @param clazz
* @param code
* @return
*/
public static <T extends IEnum> T valueOfIgnoreCase(Class<T> clazz, String code) {
return valueOf(clazz, code, true);
}
/**
* 获取枚举,区分大小写
*
* @param clazz
* @param code
* @return
*/
public static <T extends IEnum> T valueOf(Class<T> clazz, String code) {
return valueOf(clazz, code, false);
}
/**
* 获取枚举,区分大小写
*
* @param clazz
* @param code
* @param ignoreCase
* @return
*/
private static <T extends IEnum> T valueOf(Class<T> 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 extends IEnum> T[] values(Class<T> clazz) {
if (!clazz.isEnum()) {
throw new IllegalArgumentException("Class[" + clazz + "]不是枚举类型");
}
//得到values
return clazz.getEnumConstants();
}
}
3、定义一个枚举
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);
}