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. android读取剪切板的方法,Android复制粘贴剪切板内容的一种方法
  2. Java调优之jvm和线程的内存分析
  3. matlab yalmip 例程,YALMIP工具箱使用范例.pdf
  4. out.print 嵌套html代码_Shiny与HTML
  5. 如何获取当前点击元素的某个子元素
  6. 记录一次postfix无法收取邮件和mysql异常不能启动
  7. python卸载后安装不上_[宜配屋]听图阁
  8. ES5-拓展 原型链、继承、类
  9. [BZOJ2036]聪明的阿卑多
  10. Linux下如何设置和查看环境变量
  11. 越来越多优秀的老员工辞职,怎么办?
  12. WCF存储图片到指定文件夹下
  13. BZOJ4516: [Sdoi2016]生成魔咒(后缀自动机)
  14. 捷达vs7测试_没有大众车标的光环,捷达VS7显得更厚道,看看是不是你的菜
  15. saspython知乎_SAS入门书籍有哪些值得推荐?
  16. nat123内网穿透
  17. 携程的产品与收入模式分析
  18. 光耦w314的各引脚图_常用光耦型号代换大全
  19. 百度「联邦学习」战略全布局
  20. CSV是什么文件格式【转】

热门文章

  1. goim 架构与定制
  2. [拿来就用不经意识流] 谷歌多汁小萝莉的使用问题
  3. 服务器组装 华硕主板,华硕主板装机教程 华硕主板装机步骤
  4. 如何在scrapy中捕获并处理各种异常
  5. 通信原理:课程学习笔记3之确知信号和随机过程
  6. 如何有效提升技术[成为大Niu]的两个方法
  7. JAVA泛型通配符T,E,K,V区别,T以及ClassT,ClassT的区别
  8. 聚醋酸乙烯酯(PVAc)乳剂市场现状及未来发展趋势
  9. 阿里云一键登录(对接移动端) PHP
  10. OSI七层网络、TCP/IP五层网络架构、二层/三层网络