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

  1. Swift具体解释之六----------------枚举、结构体、类

    枚举.结构体.类 注:本文为作者自己总结.过于基础的就不再赘述 ,都是亲自測试的结果.如有错误或者遗漏的地方.欢迎指正,一起学习. 1.枚举 枚举是用来定义一组通用类型的一组相关值 ,关键字enum ...

  2. Java开发中的23种设计模式具体解释

    public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = fa ...

  3. [js高手之路]HTML标签解释成DOM节点

    最近在封装一个开源框架,已经写了500行, 已经具备jquery的大多数常用功能.跟jquery的使用方法完全一样,jquery的选择器,几乎都能支持,为什么说这事,跟这篇文章的主题有毛关系呢?因为这 ...

  4. 第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题

    第六个知识点:我们怎么把NP问题解释成一组可以在多项式内证明的命题 原文地址:http://bristolcrypto.blogspot.com/2014/11/52-things-number-6- ...

  5. (转)几种范数的解释 l0-Norm, l1-Norm, l2-Norm, … , l-infinity Norm

    几种范数的解释 l0-Norm, l1-Norm, l2-Norm, - , l-infinity Norm from Rorasa's blog l0-Norm, l1-Norm, l2-Norm, ...

  6. [信安Presentation]一种基于GPU并行计算的MD5密码解密方法

    -------------------paper--------------------- 一种基于GPU并行计算的MD5密码解密方法 0.abstract1.md5算法概述2.md5安全性分析3.基 ...

  7. java枚举类Enum方法简介(valueof,value,ordinal)

    Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class,   它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口.   当我们在声明一个enum类型时,我们应该注意到en ...

  8. 打包成exe可执行文件的方法

    Python安装扩展库与打包成exe可执行文件的方法 1.安装扩展库的几种方法. 首先可能需要使用 pip install --upgrade pip 来升级本机的pip程序.然后在命令提示符环境(即 ...

  9. [论文笔记] 一种Java遗留系统服务化切分和封装方法 (计算机学报, 2009)

    李翔,怀进鹏,曾晋,高鹏. 一种Java遗留系统服务化切分和封装方法. 计算机学报, 32(9), 2009, p1084-1815 (gs:5) 1. 本文研究从Java遗留系统中切分并封装出Web ...

随机推荐

  1. [LintCode] 正则表达式匹配

    class Solution { public: /** * @param s: A string * @param p: A string includes "." and &q ...

  2. 用 Stellar.js 制作视差滚动效果

    参考 http://doc.bropaul.com/Stellar.js/docs/ https://github.com/markdalgleish/stellar.js#download http ...

  3. 把 hhkb 压在mac pro上面用

    不知道你们有没有这种感觉, 用惯了外接键盘,然后切换到笔记本自带键盘的时候 手指会有不适应感? 直接 hhkb 放2018款的mac pro上总会压着原来的键盘, 而且我也不想直接禁用掉笔记本自带的键 ...

  4. Centos6.5下DHCP服务器的安装和配置

    1.首先需要安装DHCP的软件包,使用yum进行安装 # yum install -y dhcp.x86_64  dhcp-devel.x86_64 2.将/usr/share/doc/dhcp-4. ...

  5. About Outlook Rule Quota

    在Exchange中默认有设置outlook的规则的大小,如果client在outlook上设定的规则超过大小会导致功能无法使用 Outlook的郵件規則,在Exchange 2000/2003時,郵 ...

  6. c++相关知识

    0.C语言基础知识及系统相关:http://c.biancheng.net/cpp/u/jiaocheng/ 1.C++ include观点与机制:http://developer.51cto.com ...

  7. 什么是web接口

    当我们在请求一个页面的时候,会显示服务器返回的资源,其中包含了HTML.CSS和JS,除此之外,服务器还可以返回图片.视频.字体和插件等类型的资源.这些资源全部由HTTP协议传输. 如果把HTTP协议 ...

  8. C++中的默认成员函数

    一般而言,对于一个用户自定义的类类型,以下四个函数在用户没有自定义的情形下,会由编译器自动生成: 1.default constructor 2.copy constructor Someclass: ...

  9. go——字典(二)

    字典是一种数据结构,用于存储一系列无序的键值对. 字典是基于键来存储值.字典功能强大的地方是能够基于键快速检索数据. 键就像索引一样,指向与键关联的值. 1.内部实现 字典是一个集合,可以使用类似处理 ...

  10. go——字典

    Go中字典类型是散列表(hash table)的一个实现,其官方称谓是map.散列表是一个实现了关联数组的数据结构,关联数组是用于表示键值对的无序集合的一种抽象数据类型.Go中称键值对为键-元素对,它 ...