java反射 枚举_Java反射应用之获取枚举类的枚举
Java反射实际应用
实际工作中使用到的Java反射并不是很多,我接触到的基本上都是工具类中相对比较常用一些,本篇文章就是我实际工作中遇到的场景。
应用场景:一个审批流程第一个节点审批时,需要填写第二个节点的三个办理人员数据,三个办理人员的角色是固定的枚举类中的枚举值,这样第一个节点审批提交时,我们就需要创建三个不同角色的办理对象,创建对象时只需要获取枚举中的所有枚举,然后循环创建多个对象即可;这里用到获取枚举类中所有的枚举,就可以用反射的方式来获取,最终的到的是一个集合,这里我提供多种方法,通过反射方式和传统的方式都有,欢迎一起交流学习!
首先提供对应的枚举类:
public enum ReflexEnum {
TEST_1("1", "测试1"),
TEST_2("2", "测试2"),
TEST_3("3", "测试3"),
TEST_4("4", "测试4");
private String code;
private String desc;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
private ReflexEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
}
传统方式:
@Test
void getAssignEnumValue() {
List codeList = new ArrayList<>();
List descList = new ArrayList<>();
Map map = new HashMap();
for (ReflexEnum value : ReflexEnum.values()) {
String code = value.getCode();
String desc = value.getDesc();
codeList.add(code);
descList.add(desc);
map.put(code, desc);
}
System.out.println(codeList);
System.out.println(descList);
System.out.println(map);
}
执行结果:
传统方式.png
反射方式:需要提供一个接口类,然后枚举类实现接口类来完成
获取枚举包下实现BaseEnum接口的所有枚举类及对应属性值
提供接口类,
public interface BaseEnum {
String getCode();
String getDesc();
}
上面的枚举类实现这个接口类
public enum ReflexEnum implements BaseEnum{}
实现方法---第 1 种
可以获取枚举包下面的所有枚举类的属性
@Test
void getReflexValue() {
Reflections reflections = new Reflections("com.chuxin.reflex.enums");
Set> monitorClasses = reflections.getSubTypesOf(BaseEnum.class);
System.out.println("size:" + monitorClasses.size());
monitorClasses.forEach(m -> {
try {
System.out.println("name:" + m.getSimpleName());
BaseEnum[] enumConstants = m.getEnumConstants();
for (BaseEnum anEnum : enumConstants) {
System.out.println("enumName:" + anEnum + " value:" + anEnum.getCode() + " name:" + anEnum.getDesc());
}
} catch (Exception e) {
e.printStackTrace();
}
});
}
执行结果:
image.png
实现方法---第 2 种
和上面的方法相似,只不过换了一种获取get方法的方式,可根据参数获取不同枚举类中枚举
@Test
void getReflexEnumToModel(){
String enumName = "ReflexEnum";
try {
List reflexModelList = new ArrayList();
Class cls = Class.forName("com.chuxin.reflex.enums." + enumName);
Method method = cls.getMethod("values");
BaseEnum inter[] = (BaseEnum[]) method.invoke(null, null);
for (BaseEnum enumMessage : inter) {
ReflexModel vo = new ReflexModel();
vo.setCode( enumMessage.getCode() );
vo.setDesc( enumMessage.getDesc() );
reflexModelList.add(vo);
}
for (ReflexModel reflexModel : reflexModelList) {
System.out.println("code:"+reflexModel.getCode() +" ======= desc:"+ reflexModel.getDesc());
}
return;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(Collections.singletonMap("ERROR", "指定类型未找到"));
}
执行结果:
image.png
java反射 枚举_Java反射应用之获取枚举类的枚举相关推荐
- Java反射机制demo(四)—获取一个类的父类和实现的接口
2019独角兽企业重金招聘Python工程师标准>>> Java反射机制demo(四)-获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的get ...
- java反射基础_Java反射基础(一)--Class对象获取
ClassesJava中,任何一个对象要么是一个引用类型要么是基本数据类型.引用类型指的是那些直接或间接 Java.lang.Object的类.Classse,enum,和接口都是应用类型.基本类型是 ...
- java 反射 速度_Java 反射获取类方法速率和实现方式
今天突然想到Java反射.然后测试了一下1.8.0_191版本的反射性能,没想到反射竟然比直接调用性能还高. 反射介绍 Java反射是指在程序运行状态中,能检查任意对象的内容并调用任意方法.对于任何一 ...
- java反射模式_Java反射机制详解
对于一般的开发者,很少需要直接使用Java反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大. 本文主要介绍反射相关的概念以及API的使用 ...
- java 求正割_Java 反射机制详解
动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的ECMAScript(JavaScript)便是一个动态语言.除此之外如Ru ...
- java反射 注解_Java反射中的注解
"注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...
- java 反射机制_Java反射机制原理探究
反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...
- java 反射 工厂_JAVA反射机制、工厂模式与SPRING IOC
ABSTRACT Spring的IOC(控制反转)是Spring框架的灵魂,有了它才有了Spring的很多其他的灵活的特性.使用 Spring 开发项目时,控制层.业务层.DAO 层都是通过 IoC ...
- java反射机制_java反射机制的讲解
一 , 什么是java反射机制? JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...
最新文章
- 展望2009,回眸2008
- 删库不跑路,MySQL 数据库恢复教程
- 充分感受中国缺少管理型软件人才的说法
- JQuery UI 拖拽排序
- androidpn的一次亲密接触(二)
- java 定时执行任务
- HALCON: texture_laws用法解析
- 深入理解java:1.1. 类加载器
- 极大似然估计(MLE)
- 解读什么是ERP企业管理软件?
- Markdown 简历模版, typroa 一键简历生成
- 浅谈西门子840d主轴速度控制_西门子 840D 数控系统故障诊断与维修
- openssh漏洞修复
- 设置Hi提醒实现机器人盯盘|自动监测股票价格达到条件推送消息通知
- linux 根目录变为只读了,Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做 根目录只读不能写处理:...
- html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
- java计算机毕业设计网上拍卖系统源码+系统+数据库+lw文档+mybatis+运行部署
- AI模型也需要资产管理,星环科技推出AI运营平台MLOps星环科技星环科技
- 怎么和女生找话题?四个技巧让你话题不断
- Cannot use JSX unless the ‘--jsx‘ flag is provided.
热门文章
- kakfka2.2源码分析之handleFetchRequest
- Linux安装卸载Mysql与基本操作
- 聊聊前端开发日常的协作工具(全)
- 最全总结 | 聊聊 Python 办公自动化之 Word(中)
- 【iuap5.0特性解读】构建以业务创新和能力沉淀为核心的中台架构体系
- 【细胞分割】基于阙值+边缘+形态学+种子点图像分割matlab源码含 GUI
- python下载西瓜视频2020最新思路
- 事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...
- 人脸识别 人脸实名认证
- 整理程序员常用英语单词1695个