***测试demo    git仓库: https://github.com/alwaysInRoad/test-enum-demo.git

csdn下载地址: https://download.csdn.net/download/weixin_40841731/10708704

测试demo内的代码是从实际项目中抽离出来的,本demo为普通java项目。

在实际项目中所应用到的场景:在项目运行过程中,根据用户行为动态的改变sql语句中所对应的枚举值,从而动态查询或插入修改。

关键代码说明:

//根据反射获取常量类
Class c2 = Class.forName("com.zr.entity.Constant");
//获取常量类中的所有内部类
Class innerClazz[] = c2.getDeclaredClasses();
//遍历内部内
for (Class class1 : innerClazz) {
	//判断类是不是枚举类
	if(class1.isEnum()){
		//获取内部内的类名,在这里其实就是获取枚举类
		 String simpleName = class1.getSimpleName();
		//反射获取枚举类
		 Class<Enum> clazz = (Class<Enum>)Class.forName("com.zr.entity.Constant$"+simpleName);
		 //获取所有枚举实例
		 Enum[] enumConstants = clazz.getEnumConstants();
		 //根据方法名获取方法
		 Method getCode = clazz.getMethod("getDesc");
		 for (Enum enum1 : enumConstants) {
		 	 //得到枚举实例名
			 String name2 = enum1.name();
			 //执行枚举方法获得枚举实例对应的值
			 Object invoke = getCode.invoke(enum1);
			 System.out.println(name2+":"+invoke.toString());

需要注意的是:

                    Class<Enum> clazz = (Class<Enum>)Class.forName("com.zr.entity.Constant$"+simpleName);

                    内部类的反射获取需要加   &+内部类类名

结语:本人所有文章都立志写的简单易懂,戳中问题点。 当然了,简单的同时可能忽略了很多细节与详细,如有不足的地方,还请谅解并指出。  如对文章或实现技术上有问题,可联系我:qq: 1226500260     邮箱:654868284@qq.com

import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.zbwd.exception.BizException; import lombok.AllArgsConstructor; import lombok.Getter; * 事故类型 枚举类型是一种特殊的数据类型,用于定义一组固定的命常量。枚举类型提供了一种更强大、更安全和更易读的方式来表示一组相关的常量。在Java中,枚举类型是通过使用enum关键字来定义的。枚举类型可以包含一个或多个枚举常量,每个常量都是枚举类型的实例枚举常量是在枚举类型中预先定义的,它们是唯一的、已命的对象。 枚举也是类,在定义枚举的时候,其实是定义了一个枚举集合,然后在这个集合中包含一些列枚举。比如性别可以是一个枚举集合,可能中包含男性、女性等枚举。定义枚举集合以性别这个枚举集合为例,先来定义两个枚举,分别为MALE和FEMALE:publicenum Gender { MALE, FEMALE JAVA编译器会把这MALE和FEMALE转成两个枚举枚举类-Enum(name, 最近有这么一个需求,希望把系统中的枚举类型作为数据字典返回给前端,做编辑页的下拉选项。因为枚举类型很多,一个一个提供接口就有点儿太low了……,所以想到了java反射机制。在网上找到了一个例子,作为参考:我并没有做得那么复杂,只是简单的使用了反射机制,直接上代码:接口类,所有的枚举类型都继承这个接口类:package com.my.utils;public interface EnumMessa... 先说下枚举类的结构:枚举类中有许多枚举常量,枚举常量由枚举类中各个字段组成,更确切的说,枚举常量由构造方法入参字段构成。所以如果要获取枚举常量中的,首先需要使用class的getEnumConstants()方法获取枚举类中所有的枚举常量,然后使用类中对应的方法,得到常量中包含字段的。代码如下:1.枚举类代码示例package com.ecarx.jsk.jdk.poi; public en... public enum TestEnum { // GREEN,BLACK,RED; RED("red", 1), BLACK("black", 2), GREEN("greeb", 3); private String name; private int key; //枚举的构造方法,默认是私有的 TestEnum(String name, int key) JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法(哪怕是private限定);对于任意一个对象,都能够调用它的任意一个方法和属性“(即使有些属性没有提供Set Get方法);这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法,所以先要... 由于项目的发展,枚举也是越来越多,为了方便前端直接取,而不是每一次增加枚举给说一次,就写了一个根据枚举+类获取所有的枚举的接口;具体方法如下: 一、我返回的一个List<Map<String,Object>>的对象,传入的是枚举的包+类 如果确定了枚举的包,其实也可以直接传入枚举的类就可以了 * 根据枚举的字符串获取枚举... Java反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。 2用途(了解) 1、在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java反射机制通过反射获取所需的私有成员或是方法。