news 2026/8/9 14:19:54

489. Java 反射 - 枚举类型的反射操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
489. Java 反射 - 枚举类型的反射操作

文章目录

  • 489. Java 反射 - 枚举类型的反射操作
    • 1. 枚举常量在 JVM 中的本质
    • 2. 示例:获取枚举常量
    • 3. 结合 `Field` 的用法
    • 4. 扩展:动态获取枚举值
    • 🎯 总结

489. Java 反射 - 枚举类型的反射操作

在 Java 中,enum本质上就是一种特殊的类。因此反射 API 不需要为它定义专门的java.lang.reflect.Enum类。大多数枚举相关的反射操作,都和普通类或成员完全一致。

不过,反射仍然提供了三个专门针对枚举的 API

  • Class.isEnum()→ 判断某个Class对象是否表示一个枚举类型。
  • Class.getEnumConstants()→ 获取该枚举中声明的所有常量,按声明顺序返回数组。
  • Field.isEnumConstant()→ 判断某个字段是否是枚举常量。

1. 枚举常量在 JVM 中的本质

  • 每个枚举常量在字节码层面上是一个public static final字段
  • 编译器会为枚举自动生成一些方法,比如values()valueOf(String)
  • 因此,无论是通过枚举类自身调用Days.values(),还是通过反射getEnumConstants(),都能拿到枚举常量数组。

2. 示例:获取枚举常量

定义一个简单的枚举:

publicenumDays{SATURDAY,SUNDAY}

使用反射获取其类信息和常量:

Class<?>c=Days.class;System.out.println("class: "+c.getName());// 常规调用System.out.println("values: "+Arrays.toString(Days.values()));// 反射调用System.out.println("constants: "+Arrays.toString(c.getEnumConstants()));

运行结果:

class:org.devjava.Daysvalues:[SATURDAY,SUNDAY]constants:[SATURDAY,SUNDAY]

📌 可以看到:

  • Days.values()c.getEnumConstants()得到的结果完全一致。
  • 当你没有枚举实例时,getEnumConstants()是获取所有可能值的唯一方式。

3. 结合Field的用法

我们还可以遍历枚举类的字段,并判断哪些字段是枚举常量:

for(Fieldfield:Days.class.getDeclaredFields()){if(field.isEnumConstant()){System.out.println("Enum constant: "+field.getName());}}

输出:

Enumconstant:SATURDAYEnumconstant:SUNDAY

这说明反射能直接识别出哪些字段是枚举常量。


4. 扩展:动态获取枚举值

假设我们有一个方法,只知道枚举类名和常量字符串,却需要得到实际的枚举值:

Class<?>enumClass=Class.forName("org.devjava.Days");Objectsunday=Enum.valueOf((Class<Enum>)enumClass,"SUNDAY");System.out.println("enum value = "+sunday);

运行结果:

enumvalue=SUNDAY

这在配置驱动框架自动注入场景中特别有用。


🎯 总结

  • ✅ 枚举在 JVM 中是,常量是public static final字段。
  • Class.isEnum()→ 判断是否是枚举类。
  • Class.getEnumConstants()→ 获取所有常量(等价于values())。
  • Field.isEnumConstant()→ 判断某个字段是否是枚举常量。
  • ✅ 可以结合Enum.valueOf()实现字符串转枚举实例的动态操作。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 14:15:03

如何永久备份微信聊天记录:开源工具WeChatMsg的完整解决方案

如何永久备份微信聊天记录&#xff1a;开源工具WeChatMsg的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…

作者头像 李华
网站建设 2026/8/9 14:13:49

汽车商城网站建设如何从0到1打造高转化率的线上购车平台?资深开发者真诚分享避坑指南

今天咱们不整那些虚头巴脑的宏观概念,也不去背那些冷冰冰的行业白皮书数据。作为一个在代码堆里摸爬滚打多年的开发者,也作为一个亲眼见证了好几个汽车电商项目从起高楼到宴宾朋的从业者,我想跟你掏心窝子聊聊,在这个互联网下半场,如果你正准备或者正在思考“汽车商城网站…

作者头像 李华
网站建设 2026/8/9 14:13:30

风电功率预测数据集解析与LSTM模型实战

1. 风电功率预测数据集解析与应用指南最近在整理某地风电场的实测数据时&#xff0c;发现这套包含15台2MW机组的数据集特别适合用来研究风电功率预测。作为在新能源行业摸爬滚打多年的从业者&#xff0c;我想分享下这类数据集的典型特征和实际应用中的关键要点。这套数据最核心…

作者头像 李华
网站建设 2026/8/9 14:12:54

终极指南:5个简单步骤在macOS上运行Windows应用

终极指南&#xff1a;5个简单步骤在macOS上运行Windows应用 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 还在为macOS无法运行Windows专属软件而烦恼吗&#xff1f;Whisky是一款专…

作者头像 李华
网站建设 2026/8/9 14:06:54

Arcade-plus:免费开源的专业Arcaea谱面编辑器终极指南

Arcade-plus&#xff1a;免费开源的专业Arcaea谱面编辑器终极指南 【免费下载链接】Arcade-plus A better utility used to edit and preview aff files 项目地址: https://gitcode.com/gh_mirrors/ar/Arcade-plus Arcade-plus是一款专为Arcaea音乐游戏设计的开源谱面编…

作者头像 李华