枚举类

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,只提供一个方法。

最新文章

  1. Ubuntu终端Terminal常用快捷键
  2. eclipse下的tomcat内存设置大小
  3. OC基础:block.字面量
  4. tp框架基础知识
  5. Python 文件的处理
  6. Go 语言变量
  7. [查阅]Dalvik opcodes
  8. python爬虫入门urllib库的使用
  9. &lt;自动化测试方案_1&gt;第一章、为什么要做自动化测试?(Why)
  10. SpringBoot使用数据库
  11. 深入理解JVM(1)——JVM内存模型
  12. 01-Mirrorgate简介
  13. GYM 101173 F.Free Figurines(贪心||并查集)
  14. 利用Python生成随机密码
  15. 20145319 《网络渗透》web安全基础实践
  16. Swift3 中文手册.CHM版
  17. [redis] redis 对string类型数据操作
  18. PyQt5系列教程(四)信号和槽
  19. linux - native task api 测试
  20. nginx之proxy、cache、upstream模块学习

热门文章

  1. t420 win7 硬盘安装ubuntu 10.04 LTS 备忘
  2. Sword 计算机内存对齐
  3. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存
  4. 预测分析建模 Python与R语言实现
  5. LeetCode_412. Fizz Buzz
  6. linux信号--阻塞与未决
  7. c的指针和php中的引用的区别
  8. [LeetCode] 346. Moving Average from Data Stream 从数据流中移动平均值
  9. 【视频开发】【计算机视觉】doppia编译之三:编译安装opencv库
  10. servlet 读取文件