有时候需要根据实际情况将某个值解释成一个枚举,而不是根据枚举的名称。如有时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

最新文章

  1. gif 图片制作和拆解
  2. 32、shiro 框架入门三
  3. 有用的MySQL语句
  4. NET Core+Code First+Docker
  5. jQuery 表格插件25
  6. String VS Cstring(字符串)
  7. 使用回调接口实现ActiveX控件和它的容器程序的通讯
  8. 使用jquery点击一个实现button或连接,进行以下div显示,在点击隐藏
  9. 关于 Unchecked cast from Iterator to Iterator String 提示
  10. Django:之传递数据给JS、Ajax和Ajax CSRF认证
  11. Java NIO------基础理论之缓存区
  12. Docker镜像导致centos-root根分区容量爆满
  13. Java第1次实验提纲(基本概念与引入PTA+Git)
  14. Spark 用户自定义函数 Java 示例
  15. EF6中执行Sql语句
  16. mysql系列博客
  17. 修改tomcat控制台title的方法
  18. Full Tank? POJ - 3635 (bfs | 最短路)
  19. hdu 2899
  20. JS添加/移除事件

热门文章

  1. Android性能测试摘入(TestHome)
  2. python中获取字典的key列表和value列表
  3. 深度扫盲O2O
  4. 使用synergyc共享键鼠
  5. Powershell&amp;.NET数值取整处理
  6. 转!!Java设置session超时(失效)的时间
  7. Motion camera 真人动作捕捉器
  8. 009-shiro与spring web项目整合【三】验证码、记住我
  9. Angular学习笔记—RxJS与Observable(转载)
  10. LINQ不包含列表