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<String> codeList = new ArrayList<>();
List<String> 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);
执行结果:
void getReflexValue() {
Reflections reflections = new Reflections("com.chuxin.reflex.enums");
Set<Class<? extends BaseEnum>> 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();
执行结果:
String enumName = "ReflexEnum";
try {
List<ReflexModel> reflexModelList = new ArrayList<ReflexModel>();
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", "指定类型未找到"));
执行结果: