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反射应用之获取枚举类的枚举相关推荐

  1. Java反射机制demo(四)—获取一个类的父类和实现的接口

    2019独角兽企业重金招聘Python工程师标准>>> Java反射机制demo(四)-获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的get ...

  2. java反射基础_Java反射基础(一)--Class对象获取

    ClassesJava中,任何一个对象要么是一个引用类型要么是基本数据类型.引用类型指的是那些直接或间接 Java.lang.Object的类.Classse,enum,和接口都是应用类型.基本类型是 ...

  3. java 反射 速度_Java 反射获取类方法速率和实现方式

    今天突然想到Java反射.然后测试了一下1.8.0_191版本的反射性能,没想到反射竟然比直接调用性能还高. 反射介绍 Java反射是指在程序运行状态中,能检查任意对象的内容并调用任意方法.对于任何一 ...

  4. java反射模式_Java反射机制详解

    对于一般的开发者,很少需要直接使用Java反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大. 本文主要介绍反射相关的概念以及API的使用 ...

  5. java 求正割_Java 反射机制详解

    动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的ECMAScript(JavaScript)便是一个动态语言.除此之外如Ru ...

  6. java反射 注解_Java反射中的注解

    "注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...

  7. java 反射机制_Java反射机制原理探究

    反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...

  8. java 反射 工厂_JAVA反射机制、工厂模式与SPRING IOC

    ABSTRACT Spring的IOC(控制反转)是Spring框架的灵魂,有了它才有了Spring的很多其他的灵活的特性.使用 Spring 开发项目时,控制层.业务层.DAO 层都是通过 IoC ...

  9. java反射机制_java反射机制的讲解

    一 , 什么是java反射机制? JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象 ...

最新文章

  1. 展望2009,回眸2008
  2. 删库不跑路,MySQL 数据库恢复教程
  3. 充分感受中国缺少管理型软件人才的说法
  4. JQuery UI 拖拽排序
  5. androidpn的一次亲密接触(二)
  6. java 定时执行任务
  7. HALCON: texture_laws用法解析
  8. 深入理解java:1.1. 类加载器
  9. 极大似然估计(MLE)
  10. 解读什么是ERP企业管理软件?
  11. Markdown 简历模版, typroa 一键简历生成
  12. 浅谈西门子840d主轴速度控制_西门子 840D 数控系统故障诊断与维修
  13. openssh漏洞修复
  14. 设置Hi提醒实现机器人盯盘|自动监测股票价格达到条件推送消息通知
  15. linux 根目录变为只读了,Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做 根目录只读不能写处理:...
  16. html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
  17. java计算机毕业设计网上拍卖系统源码+系统+数据库+lw文档+mybatis+运行部署
  18. AI模型也需要资产管理,星环科技推出AI运营平台MLOps星环科技星环科技
  19. 怎么和女生找话题?四个技巧让你话题不断
  20. Cannot use JSX unless the ‘--jsx‘ flag is provided.

热门文章

  1. kakfka2.2源码分析之handleFetchRequest
  2. Linux安装卸载Mysql与基本操作
  3. 聊聊前端开发日常的协作工具(全)
  4. 最全总结 | 聊聊 Python 办公自动化之 Word(中)
  5. 【iuap5.0特性解读】构建以业务创新和能力沉淀为核心的中台架构体系
  6. 【细胞分割】基于阙值+边缘+形态学+种子点图像分割matlab源码含 GUI
  7. python下载西瓜视频2020最新思路
  8. 事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...
  9. 人脸识别 人脸实名认证
  10. 整理程序员常用英语单词1695个