Java | 枚举Enum中使用反射转换属性值

news/2024/11/30 2:35:40/

common wx:CodingTechWork,一起学习进步。

需求

  在开发过程中,有时候需要需要根据各个枚举类中一个字段属性值转为另一个字段属性值,如根据code转为name的需求进行前端展示。本文总结一下如何通过反射简单巧妙的进行枚举属性值的互相映射。

实践

枚举类

package com.test.selfcoding;/*** @Description TODO* @Author LiaoJy* @Date 2023/6/18*/
public enum ColourEnum {/*** 红色*/RED(1, "红色"),/*** 黄色*/YELLOW(2, "黄色"),/*** 绿色*/GREEN(3, "绿色");private Integer code;private String desc;ColourEnum(Integer code, String desc) {this.code = code;this.desc = desc;}public Integer getCode() {return code;}public String getDesc() {return desc;}public static String getDesc(Integer code) {for (ColourEnum c : ColourEnum.values()) {if (c.code.intValue() == code.intValue()) {return c.getDesc();}}return null;}public static Integer getCode(String desc) {for (ColourEnum c : ColourEnum.values()) {if (c.desc.equals(desc)) {return c.getCode();}}return null;}public static ColourEnum getEnum(Integer code) {if (code == null) {return null;}for (ColourEnum c : ColourEnum.values()) {if (c.code.intValue() == code.intValue()) {return c;}}return null;}}

反射测试类


package com.test.selfcoding.service;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** @Description* @Author LiaoJy* @Date 2023/6/18*/
public class EnumReflectServiceTest {public static void main(String[] args) throws NoSuchFieldException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {String codeValue = "1";String descValue = "黄色";Class<Enum> clazz = (Class<Enum>) Class.forName("com.test.selfcoding.ColourEnum");if (Integer.class.equals(clazz.getDeclaredField("code").getType())) {Method method = clazz.getMethod("getDesc", Integer.class);String result = (String)  method.invoke(clazz, Integer.parseInt(codeValue));System.out.println("颜色描述:" + result);}if (String.class.equals(clazz.getDeclaredField("desc").getType())) {Method method = clazz.getMethod("getCode", String.class);Integer result = (Integer)  method.invoke(clazz, descValue);System.out.println("颜色编码:" + result);}}}

运行结果

颜色描述:红色
颜色编码:2

http://www.ppmy.cn/news/691569.html

相关文章

i5 1340p和r7 7735h差距 酷睿i51340p和锐龙r77735h对比

i5 1340P采用10nm工艺 最高睿频4.6GHz 十核心 十六线程三级缓存 12MB热设计功耗(TDP) 28W 支持最大内存 64GB内存类型 DDR4 3200MHzDDR5 5200MHz集成显卡 Intel Iris Xe Graphics 选i5 1340P还是r7 7735h这些点很重要看过你就懂了 http://www.adiannao.cn/dy r7 7735h工艺&…

vue3组件的全局注册方法

全局注册​:我们可以使用 Vue 应用实例的 app.component() 方法&#xff0c;让组件在当前 Vue 应用中全局可用。import { createApp } from vueconst app createApp({})app.component(// 注册的名字MyComponent,// 组件的实现{/* ... */} ) 如果使用单文件组件&#xff0c;你可…

【Python 随练】求 100 之内的素数

题目&#xff1a; 求 100 之内的素数 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个数学问题&#xff1a;求解 100 之内的素数。我们将介绍素数的概念&#xff0c;并提供一个完整的代码示例来计算给定范围内的素数。 问题分析&#xff1a; 我们需要找出 100 之…

CDH 之 Sentry 安装失败 Unable to find the MySQL JDBC driver

安装报错如下&#xff1a; 详细日志&#xff1a; Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: com.mysql.jdbc.Driverat com.cloudera.cmf.service.hive.HiveMetastoreDbUtil.countTables(HiveMetastoreDbUtil.java…

电子电气架构——车载DoIP通信

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例外的是…

PaddleSeg中交互式分割EISeg的使用

EISeg(Efficient Interactive Segmentation)是基于飞桨开发的一个高效智能的交互式分割标注软件。它涵盖了通用、人像、遥感、医疗、视频等不同方向的高质量交互式分割模型。另外&#xff0c;将EISeg获取到的标注应用到PaddleSeg提供的其他分割模型进行训练&#xff0c;便可得到…

Java:创建方法求两个数的最大值max2,然后再写一个求三个数的最大值max3

public class TestDemo{public static int max2(int a,int b){ //先写两个数的最大值max2函数return a > b ? a : b ;}public static int max3(int a , int b ,int c){return max2(max2(a,b) , c) ;}public static void main(String[] args) {System.out.println(max3(1,3…

Algorithm1——一组数据求出max1和max2

本系列算法实现都是在学习数据结构&#xff08;C语言版&#xff09;&#xff0c;清华大学邓俊辉教授编&#xff0c;听邓老师edX网课过程中自己实现的例子。 问题&#xff1a;求出数组A[]中的最大值下标max1和次大值下标max2&#xff1f; 解决&#xff1a;用三种方法去实现 1…