根据值获取枚举类对象工具类EnumUtils
枚举类
- public enum Sex {
- man("M","男"),woman("W","女");
- private String myCode;
- private String value;
- private Sex(String myCode, String value) {
- this.myCode = myCode;
- this.value = value;
- }
- public String getMyCode() {
- return myCode;
- }
- public void setMyCode(String myCode) {
- this.myCode = myCode;
- }
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- }
公共工具类
- /**
- * https://blog.csdn.net/u010125873/article/details/81386320
- * @author admin
- */
- public class EnumUtils {
- private static Map<Class,Object> map = new ConcurrentHashMap<>();
- /**
- * 根据条件获取枚举对象
- * @param className 枚举类
- * @param predicate 筛选条件
- * @param <T>
- * @return
- */
- @SuppressWarnings("unchecked")
- public static <T> Optional<T> getEnumObject(Class<T> className, Predicate<T> predicate) {
- if(!className.isEnum()){
- // logger.info("Class 不是枚举类");
- return null;
- }
- Object obj = map.get(className);
- T[] ts = null;
- if(obj == null){
- ts = className.getEnumConstants();
- map.put(className,ts);
- }else{
- ts = (T[])obj;
- }
- return Arrays.stream(ts).filter(predicate).findAny();
- }
- public static void main(String[] args) {
- Optional<Sex> m = EnumUtils.getEnumObject(Sex.class, e -> e.getMyCode().equals("W"));
- System.out.println(m.isPresent() ? m.get().getValue():null);
- }
- }
特点:
1)能自动获取枚举类中的方法,如e.getMyCode()和m.get().getValue()
参考:https://blog.csdn.net/u010125873/article/details/81386320
另外一种通过反射实现:
- public class EnumHelperUtil{
- /**
- * 使用枚举类型对应的typeName获取枚举类型
- * @param clazz 枚举类的class
- * @param getTypeNameMethodName 传入的typeName的get方法
- * @param typeName 传入的typeName值,这个方法为Object类型
- */
- public static <T extends Enum<T>> T getEnumsValue(Class<T> clazz,String getTypeNameMethodName, Object typeName){
- T result = null;
- try{
- T[] arr = clazz.getEnumConstants();
- Method targetMethod = clazz.getDeclaredMethod(getTypeNameMethodName);
- Object typeNameVal = null;
- for(T entity:arr){
- typeNameVal = targetMethod.invoke(entity);
- if(typeNameVal.equals(typeName)){
- result = entity;
- break;
- }
- }
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (SecurityException e) {
- e.printStackTrace();
- }
- return result;
- }
- public static void main(String[] args) {
- Sex byStringTypeName = EnumHelperUtil.getEnumsValue(Sex.class, "getMyCode", 1);
- System.out.println(byStringTypeName.getValue());
- }
- }
链接:https://blog.csdn.net/busbanana/article/details/72954676
注意:原文中提供了Integer和String的2种方法,而本例统一转为Object,只提供一个方法。
根据值获取枚举类对象工具类EnumUtils的更多相关文章
- 第三章 EnumUtil根据值获取枚举对象
项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum ...
- 对象工具类 - ObjectUtils.java
对象工具类,提供对象克隆.获取对象属性.类型判断.Map转换对象.对象转Map.设置对象属性等. 源码如下:(点击下载 - ObjectUtils.java .JsonUtils.java .gso ...
- EncryptHelper加密对象-工具类
using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.W ...
- Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)
当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...
- Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable
Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...
- C++类对象作为类成员
//当其他类的对象作为本类的成员 构造的时候先去构造类的对象 再去构造自身 //析构函数: 先进后出 先去构造Phone 再去构造Person Person先退出 Phone后退出 //析构与构造顺序 ...
- JAVA 获取文件的MD5值大小以及常见的工具类
/** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...
- 获取Spring容器Bean对象工具类
在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题.为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean.因此就写了这个工具类,在此记录一下,方便后续查阅. ...
- 获取SpringBean对象工具类
获取SpringBean工具类 SpringBeanUtil代码如下: package com.meeno.wzq.util; import org.springframework.beans.Bea ...
随机推荐
- ERROR: source database "template1" is being accessed by other users
一开始,开发童鞋说他在测试环境没有创建数据库的权限.心想,不对呀,开发环境没有怎么做权限管控,明明给予授权了.上来一看: postgres=# CREATE DATABASE "abce&q ...
- [E2E_L9]Linux命令行上传文件到百度网盘
百度有2TB 存储空间,在有第三方服务器的情况下,很多东西不需要下载到本地,可以直接使用服务转存,这非常好. 系统环境: Linux 系统 + Python 2.7 安装软件工具:[可能会要重复装] ...
- ubuntu16上部署confluence-6.14.5的迁移
author:headsen chen date: 2019-10-18 15:02:06 notice :created by headsen chen himself and not al ...
- [Math] From Prior to Posterior distribution
贝叶斯统计推断 后验分布与充分性 无信息先验下的后验分布 共轭先验(conjugacy)下的后验分布 其中,正态分布的共轭先验推导过程,典型且重要. (1) 当方差已知时,均值(prior: 高斯分布 ...
- 转 perl DBI 总结
https://www.cnblogs.com/homezzm/archive/2011/07/22/2113618.html ##查看已经安装的包 #!/usr/bin/perluse strict ...
- TensorFlow.js-机器学习
一.参考学习 https://blog.csdn.net/Quincylk/article/details/85340004 http://www.tensorfly.cn/tfdoc/get_sta ...
- 【视频开发】ffmpeg 的编译选项
ffmpeg xxxx$ ./configure --help Usage: configure [options] Options: [defaults in brackets after desc ...
- 2017ACM/ICPC广西邀请赛 1004 Covering
Covering Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- NGINX安全配置和限制访问
说起网络攻击,可能很多人只知道大名鼎鼎的DDOS攻击,这种攻击廉价且效果出众,直接通过第四层网络协议用他的带宽把你的带宽顶掉,造成网路阻塞,防不胜防,就连腾讯这种大鳄公司也被大流量DDOS搞过焦头烂额 ...
- Logstash+ Kafka基于AOP 实时同步日志到es
Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地,logstash丰富的插件(logstash-in ...