枚举类

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的更多相关文章

  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. Nginx搭建简单文件下载服务器

    在C:\pleiades\nginx-1.16.1下新建一个目录files,然后放入若干文件,接下来修改nginx.conf,增加粗体字如下: #user nobody; worker_process ...

  2. nodeJs实现文件上传,下载,删除

    转:https://blog.csdn.net/qq_36228442/article/details/81709272 一.简介 本文介绍了nodeJs+express框架下,用multer中间件实 ...

  3. HTTP协议复习

    HTTP请求/响应的步骤: 客户端连接到WEB服务器:浏览器与web服务器的HTTP端口建立一个TCP套接字连接,例如:http://www.baidu.com 发送HTTP请求:通过TCP套接字,客 ...

  4. 时间工具类DateUtil

    import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  5. Java8 Stream流方法

    流是Java API的新成员,它允许以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,可以把它们看成遍历数据集的高级迭代器.此外,流还可以透明地并行处理,无需写任何多 ...

  6. rabbitmq设置消息优先级、队列优先级配置

    1.首先在consume之前声明队列的时候,要加上x-max-priority属性,一般为0-255,大于255出错  -----配置队列优先级 配置成功后rabbitmq显示: 2.在向exchan ...

  7. VS2019/VS2017怎么更改visual studio新建项目的默认路径

    1.点击“工具” 2.选择“选项” 3.点击左边的“项目和解决方案”展开选择“常规” 4.在右边- ”项目位置“来自定义默认路径 5.“确定”保存后下次新建项目就是此默认路径

  8. java 多线程 面试

    1.多线程有什么用? (1)发挥多核CPU的优势: 当前,应用服务器至少也都是双核的,4核.8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75 ...

  9. C++ ActiveX开发的问题讨论

    最近在一个项目中需要开发一个ocx插件,在开发过程中发现了一些问题,所以在此记录一下. 我想讨论的主要是函数的参数问题,我分别使用c++,JavaScript,C#对ocx插件做了测试,发现不同的参数 ...

  10. springmvc数据的封装

    spring封装是进行orm封装,可以进行定义数据类型,数据名与接收名相同,进行接收,或者定义类,类的属性名与接收名相同 单个数据类型如图下: 对象类型封装: 其他:乱码处理 在中文字符乱码,需要规定 ...