Java反射如何获取枚举类的所有常量值

 更新时间:2026年08月20日 14:21:42   作者:_lrs  
想知道Java反射怎么操作枚举类吗?本文用简洁的示例带你掌握反射获取枚举常量、调用枚举方法的核心技巧,轻松应对枚举类反射的各种场景,提升你的Java开发效率

前言

跟普通类使用反射基本一样。

一、枚举类

public enum OperateType {
    add("添加", 0),
    delete("删除", 1),
    select("查询", 2),
    update("修改", 3),
    stop("停止", 4),
    restart("重启", 5),
    check("检查", 6),
    download("下载", 7),
    upload("上传", 8),
    login("登录", 9),
    logout("退出", 10),
    other("其他", 11);
    private final String value;
    private final int intVal;

    OperateType(String value, int intVal) {
        this.value = value;
        this.intVal = intVal;
    }

    public static String getNameByIntVal(int intVal) {
        for (OperateType operateType : values()) {
            if (operateType.intVal == intVal)
                return operateType.name();
        }
        return other.name();
    }

    public String getValue() {
        return value;
    }

    public int getIntVal() {
        return intVal;
    }
}

二、反射获取枚举

 	@Test
 	public void invokeEnum() throws ClassNotFoundException {

        String name = "select";
        Class<?> clazz = Class.forName("com.iscas.biz.config.log.OperateType");
        Object[] enumConstants = clazz.getEnumConstants();

        Optional<Object> select = Arrays.stream(enumConstants)
                .filter(item -> item.toString().equalsIgnoreCase(name))
                .findFirst();
                
        if (select.isPresent()){
            OperateType enumValue = (OperateType)select.get();
            System.out.println(enumValue.name());
        }
    }

三、反射调用枚举方法

 		@Test
        public void invokeEnumMethod() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {

            String name = "select";
            String methodName = "getValue";

            Class<?> clazz = Class.forName("com.iscas.biz.config.log.OperateType");
            Object[] enumConstants = clazz.getEnumConstants();

            Optional<Object> select = Arrays.stream(enumConstants)
                    .filter(item -> item.toString().equalsIgnoreCase(name))
                    .findFirst();
            if (select.isPresent()) {
                Object obj =select.get();
                
                Method method = clazz.getDeclaredMethod(methodName);
                Object value = method.invoke(obj);

                System.out.println(value);
            }
        }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Base64编码长度怎么计算?两种方式详解与实例

    Java Base64编码长度怎么计算?两种方式详解与实例

    还在为Java Base64编码后的长度计算发愁?本文深入解析java.util.Base64的两种编码方式,结合源码总结长度计算公式,让你轻松掌握编码后长度差异,无论你是新手还是老手,都能快速理解并应用
    2026-08-08
  • Java 普通代码块静态代码块执行顺序(实例讲解)

    Java 普通代码块静态代码块执行顺序(实例讲解)

    下面小编就为大家带来一篇Java 普通代码块静态代码块执行顺序(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Nacos封装通用HttpClient详解

    Nacos封装通用HttpClient详解

    这篇文章主要介绍了Nacos封装通用HttpClient用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 如何更快乐的使用Java 8中的Lambda特性

    如何更快乐的使用Java 8中的Lambda特性

    从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能。下面这篇文章主要给大家介绍了关于如何更快乐的使用Java 8中的Lambda特性的相关资料,需要的朋友可以参考下
    2018-11-11
  • Java生成和解析XML格式文件和字符串的实例代码

    Java生成和解析XML格式文件和字符串的实例代码

    这篇文章主要介绍了Java生成和解析XML格式文件和字符串的实例代码,需要的朋友可以参考下
    2014-02-02
  • Java源码解析之ClassLoader

    Java源码解析之ClassLoader

    在看系统启动的流程中看到了ClassLoader使用,重新温故下ClassLoader流程和原理,文中有非常详细的代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Mybatis-Plus BaseMapper的用法详解

    Mybatis-Plus BaseMapper的用法详解

    这篇文章主要介绍了Mybatis-Plus BaseMapper的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java线程池ForkJoinPool(工作窃取算法)的使用

    Java线程池ForkJoinPool(工作窃取算法)的使用

    Fork就是把一个大任务切分为若干个子任务并行地执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。Fork/Join 框架使用的是工作窃取算法。本文主要介绍了ForkJoinPool的使用,需要的可以参考一下
    2022-11-11
  • Java MyBatis本地缓存原理详解

    Java MyBatis本地缓存原理详解

    这篇文章主要介绍了Java MyBatis本地缓存原理详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java数组的基本操作方法整理

    Java数组的基本操作方法整理

    这篇文章主要介绍了Java数组的基本操作方法整理,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08

最新评论