Java通过反射获取枚举中的值
场景:
今天工作中遇到一个需求,调用方传入一个json【lable】
{ "student":[ { "lable":"LINS1" }, { "lable":"LINS2" }, { "lable":"LINS2" } ] }
然后我们使用一个封装好的枚举【不是我们封装】,并且不能修改,但是必须通过传入的json中某个字段来补充对象,然后入库,
enum StudentEnum { ZS("LINS1","zs", "18"), LS("LINS2","ls", "16"), WW("LINS3","ww", "16"); private String lable; private String name; private String age; public String getLable() { return lable; } public void setLable(String lable) { this.lable = lable; } StudentEnum(String lable, String name, String age) { this.name = name; this.lable = lable; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public static StudentEnum getByName(String name) { StudentEnum[] values = StudentEnum.values(); for (StudentEnum studentEnum : values) { if (StringUtils.equals(name, studentEnum.getName())) { return studentEnum; } } return null; } }
-
Student对象
@Data public class Student { private String age; private String name; }
解决思路:
可以通过反射来获取对应的枚举对象,然后再把值赋给Student对象 Enum.class.getEnumConstants可以拿到枚举数组
代码实现
@org.junit.Test public void test5() throws Exception { Student stu = new Student(); //模拟解析json后的lable的值 String inputLable = "LINS2"; Class<StudentEnum> testEnumClass = StudentEnum.class; StudentEnum[] enumConstants = testEnumClass.getEnumConstants(); Method getLable = testEnumClass.getMethod("getLable"); Method getName = testEnumClass.getMethod("getName"); Method getAge = testEnumClass.getMethod("getAge"); for (StudentEnum studentEnum : enumConstants) { if (StringUtils.equals(inputLable,getLable.invoke(studentEnum).toString())){ stu.setAge(getAge.invoke(studentEnum).toString()); stu.setName(getName.invoke(studentEnum).toString()); } } System.out.println(stu); }
运行结果
总结
这个需求主要就是要拿到枚举中的值【key】,其他再用invoke执行得到具体的值,最后封装就可以了。
上一篇:
Java基础知识总结(2021版)