枚举类

  1. public enum Sex {
  2.  
  3. man("M","男"),woman("W","女");
  4. private String myCode;
  5. private String value;
  6.  
  7. private Sex(String myCode, String value) {
  8. this.myCode = myCode;
  9. this.value = value;
  10. }
  11. public String getMyCode() {
  12. return myCode;
  13. }
  14. public void setMyCode(String myCode) {
  15. this.myCode = myCode;
  16. }
  17. public String getValue() {
  18. return value;
  19. }
  20. public void setValue(String value) {
  21. this.value = value;
  22. }
  23.  
  24. }

公共工具类

  1. /**
  2. * https://blog.csdn.net/u010125873/article/details/81386320
  3. * @author admin
  4. */
  5. public class EnumUtils {
  6.  
  7. private static Map<Class,Object> map = new ConcurrentHashMap<>();
  8.  
  9. /**
  10. * 根据条件获取枚举对象
  11. * @param className 枚举类
  12. * @param predicate 筛选条件
  13. * @param <T>
  14. * @return
  15. */
  16. @SuppressWarnings("unchecked")
  17. public static <T> Optional<T> getEnumObject(Class<T> className, Predicate<T> predicate) {
  18. if(!className.isEnum()){
  19. // logger.info("Class 不是枚举类");
  20. return null;
  21. }
  22. Object obj = map.get(className);
  23. T[] ts = null;
  24. if(obj == null){
  25. ts = className.getEnumConstants();
  26. map.put(className,ts);
  27. }else{
  28. ts = (T[])obj;
  29. }
  30. return Arrays.stream(ts).filter(predicate).findAny();
  31. }
  32.  
  33. public static void main(String[] args) {
  34.  
  35. Optional<Sex> m = EnumUtils.getEnumObject(Sex.class, e -> e.getMyCode().equals("W"));
  36. System.out.println(m.isPresent() ? m.get().getValue():null);
  37. }
  38. }

特点:

1)能自动获取枚举类中的方法,如e.getMyCode()和m.get().getValue()

参考:https://blog.csdn.net/u010125873/article/details/81386320

另外一种通过反射实现:

  1. public class EnumHelperUtil{
  2. /**
  3. * 使用枚举类型对应的typeName获取枚举类型
  4. * @param clazz 枚举类的class
  5. * @param getTypeNameMethodName 传入的typeName的get方法
  6. * @param typeName 传入的typeName值,这个方法为Object类型
  7. */
  8. public static <T extends Enum<T>> T getEnumsValue(Class<T> clazz,String getTypeNameMethodName, Object typeName){
  9. T result = null;
  10. try{
  11. T[] arr = clazz.getEnumConstants();
  12. Method targetMethod = clazz.getDeclaredMethod(getTypeNameMethodName);
  13. Object typeNameVal = null;
  14. for(T entity:arr){
  15. typeNameVal = targetMethod.invoke(entity);
  16. if(typeNameVal.equals(typeName)){
  17. result = entity;
  18. break;
  19. }
  20. }
  21. } catch (IllegalAccessException e) {
  22. e.printStackTrace();
  23. } catch (IllegalArgumentException e) {
  24. e.printStackTrace();
  25. } catch (InvocationTargetException e) {
  26. e.printStackTrace();
  27. } catch (NoSuchMethodException e) {
  28. e.printStackTrace();
  29. } catch (SecurityException e) {
  30. e.printStackTrace();
  31. }
  32. return result;
  33. }
  34.  
  35. public static void main(String[] args) {
  36. Sex byStringTypeName = EnumHelperUtil.getEnumsValue(Sex.class, "getMyCode", 1);
  37. System.out.println(byStringTypeName.getValue());
  38. }
  39. }

链接:https://blog.csdn.net/busbanana/article/details/72954676

注意:原文中提供了Integer和String的2种方法,而本例统一转为Object,只提供一个方法。

根据值获取枚举类对象工具类EnumUtils的更多相关文章

  1. 第三章 EnumUtil根据值获取枚举对象

    项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum ...

  2. 对象工具类 - ObjectUtils.java

    对象工具类,提供对象克隆.获取对象属性.类型判断.Map转换对象.对象转Map.设置对象属性等. 源码如下:(点击下载 -  ObjectUtils.java .JsonUtils.java .gso ...

  3. EncryptHelper加密对象-工具类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; using System.W ...

  4. Spring MVC普通类或工具类中调用service报空空指针的解决办法(调用service报java.lang.NullPointerException)

    当我们在非Controller类中应用service的方法是会报空指针,如图: 这是因为Spring MVC普通类或工具类中调用service报空null的解决办法(调用service报java.la ...

  5. Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable

    Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...

  6. C++类对象作为类成员

    //当其他类的对象作为本类的成员 构造的时候先去构造类的对象 再去构造自身 //析构函数: 先进后出 先去构造Phone 再去构造Person Person先退出 Phone后退出 //析构与构造顺序 ...

  7. JAVA 获取文件的MD5值大小以及常见的工具类

    /** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...

  8. 获取Spring容器Bean对象工具类

    在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题.为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean.因此就写了这个工具类,在此记录一下,方便后续查阅. ...

  9. 获取SpringBean对象工具类

    获取SpringBean工具类 SpringBeanUtil代码如下: package com.meeno.wzq.util; import org.springframework.beans.Bea ...

随机推荐

  1. ERROR: source database "template1" is being accessed by other users

    一开始,开发童鞋说他在测试环境没有创建数据库的权限.心想,不对呀,开发环境没有怎么做权限管控,明明给予授权了.上来一看: postgres=# CREATE DATABASE "abce&q ...

  2. [E2E_L9]Linux命令行上传文件到百度网盘

    百度有2TB 存储空间,在有第三方服务器的情况下,很多东西不需要下载到本地,可以直接使用服务转存,这非常好. 系统环境: Linux 系统 + Python 2.7 安装软件工具:[可能会要重复装] ...

  3. ubuntu16上部署confluence-6.14.5的迁移

    author:headsen chen date:  2019-10-18  15:02:06 notice :created  by  headsen chen himself and not al ...

  4. [Math] From Prior to Posterior distribution

    贝叶斯统计推断 后验分布与充分性 无信息先验下的后验分布 共轭先验(conjugacy)下的后验分布 其中,正态分布的共轭先验推导过程,典型且重要. (1) 当方差已知时,均值(prior: 高斯分布 ...

  5. 转 perl DBI 总结

    https://www.cnblogs.com/homezzm/archive/2011/07/22/2113618.html ##查看已经安装的包 #!/usr/bin/perluse strict ...

  6. TensorFlow.js-机器学习

    一.参考学习 https://blog.csdn.net/Quincylk/article/details/85340004 http://www.tensorfly.cn/tfdoc/get_sta ...

  7. 【视频开发】ffmpeg 的编译选项

    ffmpeg xxxx$ ./configure --help Usage: configure [options] Options: [defaults in brackets after desc ...

  8. 2017ACM/ICPC广西邀请赛 1004 Covering

    Covering Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  9. NGINX安全配置和限制访问

    说起网络攻击,可能很多人只知道大名鼎鼎的DDOS攻击,这种攻击廉价且效果出众,直接通过第四层网络协议用他的带宽把你的带宽顶掉,造成网路阻塞,防不胜防,就连腾讯这种大鳄公司也被大流量DDOS搞过焦头烂额 ...

  10. Logstash+ Kafka基于AOP 实时同步日志到es

    Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地,logstash丰富的插件(logstash-in ...