Java 枚举的使用与反射应用

文章目录

  • 一、定义方式
      • 1.1 简单定义
      • 1.2 带参数定义
  • 二、反射应用
      • 1. 反射获取枚举常量
      • 2. 反射获取枚举属性
      • 3. 动态调用枚举方法
      • 4. 动态设置枚举属性
      • 5. 判断枚举类型
      • 6. 反射获取枚举信息

  • 单例模式:枚举类型是一种有限实例的类,枚举常量在定义时就被限定为一组固定的实例,不能动态添加或修改。每个枚举常量都是枚举类型的实例,因此枚举类型天然地支持单例模式。

  • 类型安全:枚举类型是类型安全的,编译器会在编译时检查枚举值的合法性,避免使用无效的枚举常量,在多线程环境下使用枚举类型是线程安全的。

  • 不可继承:枚举类型默认是final修饰的,不能被继承,因为枚举类型已经提供了固定的实例集合。

  • 可添加属性和方法:枚举类型可以拥有字段、方法和构造函数,可以为每个枚举常量添加属性和行为。

一、定义方式

  Java枚举是一种特殊的数据类型,用于定义一组常量集合,可以定义简单的枚举常量,也可以为枚举常量添加属性和方法。

1.1 简单定义

// 定义表示星期的枚举类型
public enum Weekday {MONDAY, // 星期一TUESDAY, // 星期二WEDNESDAY, // 星期三THURSDAY, // 星期四FRIDAY, // 星期五SATURDAY, // 星期六SUNDAY // 星期日
}

1.2 带参数定义

带参数定义允许枚举常量携带额外信息,使枚举更具灵活性。

// 定义表示季节的枚举类型,每个季节携带中文名称
public enum Season {SPRING(1,"春天"), SUMMER(2,"夏天"), AUTUMN(3,"秋天"), WINTER(4,"冬天"); private Integer index; private String chineseName; public Integer getIndex() {return index;}public String getChineseName() {return chineseName;}
}

枚举类型可以通过values()方法获取所有枚举常量的数组,方便遍历枚举值。

    public static String getByCode(Integer index){for(Season season : values()){if (season.getIndex() == index) {return getIndex.getChineseName();}}return null;}



二、反射应用

1. 反射获取枚举常量

public class EnumReflectionExample {enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}public static void main(String[] args) {// 获取枚举类对象Class<Day> enumClass = Day.class;// 获取枚举常量Day[] days = enumClass.getEnumConstants();for (Day day : days) {System.out.println(day);}}
}

2. 反射获取枚举属性

public class EnumReflectionExample {enum Day {MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");private String chineseName;Day(String chineseName) {this.chineseName = chineseName;}public String getChineseName() {return chineseName;}}public static void main(String[] args) {// 获取枚举类对象Class<Day> enumClass = Day.class;// 获取枚举属性try {Field chineseNameField = enumClass.getDeclaredField("chineseName");chineseNameField.setAccessible(true);for (Day day : Day.values()) {String chineseName = (String) chineseNameField.get(day);System.out.println(day + " 的中文名是:" + chineseName);}} catch (NoSuchFieldException | IllegalAccessException e) {e.printStackTrace();}}
}

3. 动态调用枚举方法

public class EnumReflectionExample {enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;public void sayHello() {System.out.println("今天是:" + this);}}public static void main(String[] args) {// 动态调用枚举方法try {Day monday = Day.valueOf("MONDAY");monday.sayHello();} catch (IllegalArgumentException e) {e.printStackTrace();}}
}

4. 动态设置枚举属性

public class EnumReflectionExample {enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;private String description;public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}public static void main(String[] args) {// 动态设置枚举属性Day monday = Day.MONDAY;monday.setDescription("星期一");System.out.println(monday.getDescription());}
}

5. 判断枚举类型

public class EnumReflectionExample {enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}public static void main(String[] args) {// 枚举类型判断Class<?> enumClass = Day.class;if (enumClass.isEnum()) {System.out.println("这是一个枚举类型");} else {System.out.println("这不是一个枚举类型");}}
}

6. 反射获取枚举信息

public class EnumReflectionExample {enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}public static void main(String[] args) {// 枚举信息获取Class<Day> enumClass = Day.class;System.out.println("枚举类的简单名称:" + enumClass.getSimpleName());System.out.println("枚举类的全限定名称:" + enumClass.getName());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决在云服务器上无法使用QQ邮箱发送邮件的问题

最近在做测试demo的时候发现&#xff0c;在本地可以使用qq邮箱的服务来进行邮件的发送&#xff0c;但是把项目部署到云服务器上就没办法发送邮件&#xff0c;并且报错是连接超时&#xff1a; 向xxxxxqq.com用户发送绑定邮箱验证码异常&#xff1a;Mail server connection fail…

leetcode234-Palindrome Linked List

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 分析 可以用快慢指针的方式找到链表的…

自用代码生成器代码

代码生成器 pom.xml文件中 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

【软件测试】自动化测试 Selenium 篇(一)

一、什么是自动化测试 1、自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化就相当于将人工测试手段进行转换…

【激活函数--下】非线性函数与ReLU函数

文章目录 一、非线性函数在神经网络中的重要性二、ReLU函数介绍及其实现2.1 ReLU函数概述2.2 ReLU函数的Python实现及可视化 一、非线性函数在神经网络中的重要性 在神经网络中&#xff0c;激活函数的选择对于网络的性能和能力至关重要。阶跃函数和Sigmoid函数除了是激活函数的…

数据可视化-课堂记录

week02 # 数据可视化的发展历史 作用 格式塔原则 # 数据可视化的流程# 数据分析 指标体系建设 确定一个行业指标体系实现报表&#xff08;power bi python matplotlib seaborn pyecharts echarts&#xff09; # 数据分析面试 技术&#xff1a;sqlexcelpythonpowerbispss …

JS 实现冒泡排序

冒泡排序原理&#xff1a; 升序冒泡&#xff1a;两次循环&#xff0c;相邻元素两两比较&#xff0c;如果前面的大于后面的&#xff0c;就交互位置&#xff1b; 降序冒泡&#xff1a;两次循环&#xff0c;相邻元素两两比较&#xff0c;如果前面的小于后面的&#xff0c;就交互…

stable-diffusion-webui配置

源码地址 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git报错Fresh install fail to load AttributeError: NoneType object has no attribute _id pydantic降级 pip uninstall pydantic pip install pydantic1.10.11记得要把clip-vit-large-patch14放在opena…

业务逻辑攻击是什么,如何有效进行防护

想象一下&#xff1a;您的开发团队刚推出了一款令人惊叹的全新应用程序&#xff0c;它具有顶级的API安全性&#xff0c;通过客户端保护对其进行了强化&#xff0c;甚至还设置了针对机器人攻击的防御措施。你感到这款产品很有安全保障&#xff0c;自己的团队出色地完成了工作。 …

解决Java Web应用中下载文件无法打开的问题

在Java Web应用中&#xff0c;文件下载是一个常见的功能。但有时候&#xff0c;即使代码看起来正确&#xff0c;下载的文件却无法正确打开。 问题描述 假设我们有以下代码用于下载文件&#xff1a; response.addHeader("Content-Disposition", "attachment;fi…

服务器通的远程桌面连接不上,关于服务器通畅但远程桌面连接不上问题的专业分析

在日常的企业IT管理中&#xff0c;服务器远程桌面连接是一个重要的操作功能。然而&#xff0c;有时会出现服务器网络通畅&#xff0c;但远程桌面无法连接的情况。 问题分析 1. 防火墙或安全组设置问题&#xff1a;服务器的防火墙或安全组可能阻止了远程桌面连接的端口&#xf…

adobe安装“Error:SyntaxError:JSON Parse error:Unexpec

mac电脑安装Adobe时&#xff0c;会提示错误“Error:SyntaxError:JSON Parse error:Unexpected EOF”&#xff0c;这是怎么回事儿的&#xff0c;不管您是安装AI、PS、PR还是LR&#xff0c;如果也遇到相同的问题&#xff0c;可以参考一下方法解决&#xff1a; 「adobe安装提示错误…

Java RMI反序列化总结篇-01

1.java rmi反序列化 RMI 允许一个应用程序访问另外一个服务器或虚拟机上的对象&#xff0c;方法和服务&#xff0c;它使远程方法调用就像在本地调用一样简单。它为用户屏蔽了底层的网络传输细节&#xff0c;使用的时候只需适当处理异常即可。所以 RMI 是非常容易使用的&#x…

Kubernetes集群安装

Kubernetes集群安装 环境准备 192.168.1.53 k8s-master 192.168.1.52 k8s-node-1 192.168.1.51 k8s-node-2 设置三台机器的主机名&#xff1a; Master上执行&#xff1a; [rootlocalhost ~]# hostnamectl --static set-hostname k8s-masterNode1上执行&#xff1a; [ro…

vue3+vite项目部署服务器,选择非根目录访问

背景 vue3vite项目&#xff0c;需要部署服务器。 但是根目录已经部署了另外一个项目A了&#xff0c;这个时候要在部署另外一个项目B。 问题 比如你的地址是http://test.com 之前直接输入http://test.com即可访问A项目 如果B项目也这么干的话就冲突了 访问A&#xff1a;http…

哪款骨传导耳机最值得入手?精选5款顶尖配置的骨传导耳机,闭眼入也不踩雷!

作为一名有着多年工作经验的数码博主&#xff0c;我见证了无数因盲目追求新颖而引发的听力问题。在此&#xff0c;我必须郑重提醒大家&#xff0c;虽然市面上充斥着众多声称能提供卓越音质和佩戴舒适度的骨传导耳机品牌&#xff0c;但它们之间存在大量劣质产品&#xff0c;这类…

centos7安装zabbix-server

zabbixan-server安装 环境安装zabbix安装zabbix配置apachezabbix-UI前端配置修改zabbix为中文语言 环境 准备&#xff1a; centos7系统、mysql数据库/MariaDB数据库 mysql数据库可参照&#xff1a;https://blog.csdn.net/weixin_61367575/article/details/138774428?spm1001.…

算法-卡尔曼滤波之卡尔曼滤波的第二个方程:预测方程(状态外推方程)

在上一节中&#xff0c;使用了静态模型&#xff0c;我们推导出了卡尔曼滤波的状态更新方程&#xff0c;但是在实际情况下&#xff0c;系统都是动态&#xff0c;预测阶段&#xff0c;前后时刻的状态是改变的&#xff0c;此时我们引入预测方程&#xff0c;也叫状态外推方程&#…

企业为什么进行大数据迁移以及注意事项

在当今数字化时代&#xff0c;数据的迁移成为了企业优化其数据架构、提高数据处理能力、确保业务连续性和数据安全的关键步骤。企业可能出于多种原因&#xff0c;如成本效益、性能提升、系统升级、数据集中管理或云服务集成等&#xff0c;选择将数据从一个存储系统迁移到另一个…

Spring Boot 整合讯飞星火3.5通过接口Api接口实现聊天功能(首发)复制粘贴即可使用,后续更新WebSocket实现聊天功能

程序员必备网站&#xff1a; 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><depen…