首页 > 编程语言 >Java—枚举Enum中使用反射转换属性值

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

时间:2023-06-19 14:37:44浏览次数:42  
标签:code Java String Enum return ColourEnum 枚举 Integer desc

关注微信公众号: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

标签:code,Java,String,Enum,return,ColourEnum,枚举,Integer,desc
From: https://blog.51cto.com/u_16102572/6513141

相关文章

  • Understanding JavaScript Garbage Collection: Dive into Reference Counting and Ma
    JavaScript,theprogramminglanguageoftheweb,isoftenpraisedforitsabilitytohandlememorymanagementautomatically.TheJavaScriptengine'sgarbagecollectorplaysapivotalroleinthisprocess.Today,we'lltakeadeepdiveintotwom......
  • API接口开发系列(获得京东JD商品详情原数据java源代码调用示例)
    ​请求获取京东商品详情原数据(免费获取调用)的作用:1.提供商品信息:京东商品详情中的原数据可以提供商品的基本信息,包括商品名称、价格、品牌、规格参数、图片等,让消费者更好地了解商品。2.帮助搜索引擎识别:京东商品详情的原数据可以被搜索引擎识别,在搜索结果页中显示更为详细丰富......
  • 20230308 java.util.ArrayList
    简介java.util.ArrayListList接口的可调整大小的数组实现。源码中对数组的操作非常精彩,值得学习数组一旦初始化长度就不可以发生改变数组结构特点增删慢:每次删除元素,都需要更改数组长度、拷贝以及移动元素位置。查询快:由于数组在内存中是一块连续空间,因此可以根据地址......
  • Java 编码(一)Java实现SHA256算法
    本文实例讲述了JavaSHA-256加密的两种实现方法。分享给大家供大家参考,具体如下:参考文献 Java实现SHA256算法-自学java的小陈-博客园(cnblogs.com)1、利用Apache的工具类实现加密:maven:<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</......
  • 【Android面试】2023最新面试专题五:Java深入泛型与注解
    1泛型是什么,泛型擦除呢?详细讲解享学课堂移动互联网系统课程:架构师筑基必备技能《架构设计中必不可少的泛型-Java泛型的定义与原理》这道题想考察什么?泛型考察的知识点泛型的特点和优缺点以及泛型擦除考生应该如何回答泛型就是一种就是一种不确定的数据类型。在Java中有着重要的地......
  • 记录一次Java Convert Kotlin造成的空指针异常
    不知道大家在使用Kotlin进行编码的时候,有没有直接使用AS的Code->ConvertJavaFile2KotlinFile这个功能,此功能在日常使用中还是比较实用的,可以帮助我们将老的Java或者复制的Java代码一键转换成Kotlin代码,最近在使用此功能的时候竟然遇到了空指针的Crash,在此记录一下,顺便也给大......
  • 【Android面试】2023最新面试专题四:Java核心基础(上)
    1Java中提供了抽象类还有接口,开发中如何去选择呢?这道题想考察什么?Java是面向对象编程的,抽象是它的一大特征,而体现这个特征的就是抽象类与接口。抽象类与接口某些情况下都能够互相替代,但是如果真的都能够互相替代,那Java为何会设计出抽象与接口的概念?这就需要面试者能够掌握两者的区......
  • 在 JavaScript 中,判断一个对象是否为空有几种方法。
    使用Object.keys()方法检查对象的键值对数量:functionisObjectEmpty(obj){returnObject.keys(obj).length===0;}//示例用法constobj1={};console.log(isObjectEmpty(obj1));//输出:trueconstobj2={name:'John',age:25};console.log(isObjectEm......
  • API接口开发系列(获得京东JD商品详情原数据java源代码调用示例)
    请求获取京东商品详情原数据(免费获取调用请私信)的作用:1.提供商品信息:京东商品详情中的原数据可以提供商品的基本信息,包括商品名称、价格、品牌、规格参数、图片等,让消费者更好地了解商品。2.帮助搜索引擎识别:京东商品详情的原数据可以被搜索引擎识别,在搜索结果页中显示更为详细丰富......
  • SprintBoot JavaWeb访问提示 Full authentication is required to access this resour
    SprintBoot部署好网站之后访问没有异常,但是配置域名地址至Nginx上时登录请求报错了,经查询是因为项目是前后端分离,请求的路由会加上工程的主路径,所以需要在Nginx多配置一个地址,如Location/{http://localhost:8080/project}location/project/{http://loc......