java 反射 获取enum_用反射的方法获取枚举值(数据字典)

通过Java反射机制,将系统中的枚举类型转换为数据字典返回给前端,简化接口提供。示例代码展示如何从枚举类获取`getKey`和`getValue`,并转换为`KeyValue`对象集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有这么一个需求,希望把系统中的枚举类型作为数据字典返回给前端,做编辑页的下拉选项。因为枚举类型很多,一个一个提供接口就有点儿太low了……,所以想到了java的反射机制。在网上找到了一个例子,作为参考:

我并没有做得那么复杂,只是简单的使用了反射机制,直接上代码:

接口类,所有的枚举类型都继承这个接口类:

package com.my.utils;

public interface EnumMessage {

String getKey();

String getValue();

}

枚举类:

package com.my.enumtype;

import com.my.utils.EnumMessage;

public enum Status implements EnumMessage {

ACTIVE("正常"),

CLOSED("关闭"),

DELETED("删除");

public String getDesc() {

return desc;

}

private String desc;

private Status(String desc) {

this.desc = desc;

}

@Override

public String getValue() { return desc;}

@Override

public String getKey() { return name(); }

}

由于返回的entity类:

public class KeyValue implements Serializable {

private String key;

private String value;

public String getKey() { return key; }

public void setKey(String key) { this.key = key; }

public String getValue() { return value; }

public void setValue(String value) { this.value = value; }

}

调用方法:

public Map getDict(String enumName) {

try {

List keyValueList = new ArrayList();

Class cls = Class.forName("com.my.enumtype." + enumName);

Method method = cls.getMethod("values");

EnumMessage inter[] = (EnumMessage[]) method.invoke(null, null);

for (EnumMessage enumMessage : inter) {

KeyValue vo = new KeyValue();

vo.setKey( enumMessage.getKey() );

vo.setValue( enumMessage.getValue() );

keyValueList.add(vo);

}

return Collections.singletonMap("data", keyValueList);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

return Collections.singletonMap("ERROR", "指定类型未找到");

}

==============

顺便说一下我对枚举类型使用的看法,不一定对,欢迎指正:

使用于系统内部使用,还是挺方便的,便于管理。在数据库sql的转换上也不需要特殊处理。(Mybatis有映射的机制)

系统间的传递数据确实不适合,好在转成String类型也可以是自动的

作为数据字典,可以使用数据库作为补充。那些不变的,跟系统功能高度相关的类型,用enum管理(增加类型,需要修改enum及其相关的业务代码);那些跟业务弱相关且需要动态变化的,可以在数据库里建一个dict表,放在管理后台维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值