Java 中枚举类的使用
JAVA 使用 枚举
2023-06-13 09:11:53 时间
在日常写项目时,很多数据字典常量都需要定义和使用,同时在 Java 面试中,枚举也是一个绕不开的话题,这篇文章就来详细介绍一下枚举的定义以及使用。
01
【什么是枚举类?】
枚举类型在 C# 或 C++ 、 java 、 VB 等一些编程语言中是一种基本数据类型而不是构造数据类型。
而在C语言中则是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
枚举类的定义就是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内,使用枚举可以很方便地定义数据常量、以及我们的使用。
02
【为什么需要枚举类?】
举个简单的例子来说明一下~
(1)出于类型安全考虑,没用枚举类之前,常用静态常量来表示。
比如对于性别的表示:
public static final int WOMAN = 0;public static final int MAN = 1;
这种性别定义实际上是一个整数数据类型。首先,这些变量可用于加减运算,但我们通常不这么干。
第二,含义不明确。我们调试的时候,最初将“男”输出,结果为1。因此,我们必须在前面寻找0的含义。
尤其是当我们查看其他人的代码时会看不懂。而定义枚举类在类里面进行详细说明的话就能清楚得知含义。
(2)代码更优雅。
在大一点的项目中,可以使用数百个静态常量。如果它们都写在一个文件类里面的话,很容易造成命名混乱,程序也很难读取。
(3)可以帮助我们定义所需的类型。
枚举易于记忆和使用,相当于一个接口。使用时,只需封装内部数据类型并限制数据字段。
此外,还可以为不同的枚举变量调用不同的处理方法(这可以通过实现枚举类的抽象方法来实现)。
03
【枚举类的定义和使用】
下面就定义一个试题类型的枚举类来帮助大家理解:
/** * 试题类型 枚举类; 0 填空题、1 判断 题、2 单选题、3 多选题、4 简答题、5 问答题、6 论述题、7 计算题、8 画图题、9 其他题 * @date 2022/08/31 */public enum TopicTypeEnum { /** 填空题 */ FILL_IN_THE_BLANK(0, "填空题"), /** 判断题 */ JUDGE(1, "判断题"), /** 单选题 */ SINGLE_CHOICE(2, "单选题"), /** 多选题 */ MULTIPLE_CHOICE(3, "多选题"), /** 简答题 */ BRIEF_ANSWER(4, "简答题"), /** 问答题 */ QUESTIONS_AND_ANSWERS(5, "问答题"), /** 论述题 */ DISCUSS(6, "论述题"), /** 计算题 */ COMPUTE(7, "计算题"), /** 画图题 */ //最后一个类型必须要用分号结束 DRAW_PICTURE(9, "画图题");
/** 值 */ private final Integer code;
/** 名称 */ private final String name;
public static TopicTypeEnum getByCode(Integer code) { if (null == code) { return null; } for (TopicTypeEnum status : TopicTypeEnum.values()) { if (status.getCode().intValue() == code.intValue()) { return status; } } return null; }
public static TopicTypeEnum getByName(String name) { for (TopicTypeEnum status : TopicTypeEnum.values()) { if (status.getName().equals(name)) { return status; } } return null; }
public static List<NameCode> getNameCode() { return Stream.of(TopicTypeEnum.values()) .map(item -> new NameCode(item.getCode(), item.getName())) .collect(Collectors.toList()); }
TopicTypeEnum (Integer code, String name) { this.code = code; this.name = name; }
public Integer getCode() { return code; }
public String getName() { return name; }
/** * @author lyy * @date 2022/06/14 * @return 枚举对象数组 */ public static List<Map<String, Object>> toList() { List<Map<String, Object>> list = new ArrayList<>(); for (TopicTypeEnum item : TopicTypeEnum.values()) { Map<String, Object> map = new HashMap<>(); map.put("code", item.getCode()); map.put("name", item.getName()); list.add(map); } return list; }
一些枚举类的常用方法:
- valueOf():返回当前枚举类的name属性,如果没有,则throw new java.lang.IllegalArgumentException()。具体可以查看java.lang.Enum源码。
- values():返回包括所有枚举变量的数组。
- toString(),name():返回当前枚举类变量的name属性
- ordinal():枚举类会给所有的枚举变量一个默认的次序,该次序从0开始,是根据我们定义的次序来排序的。而ordinal()方法就是获取这个次序(或者说下标)。
- compareTo():返回两个次序相减后的结果。
阅读原文
了解老九学堂线下高薪就业班详情
相关文章
- java判断一个对象是否为空_Java中判断对象是否为空的方法的详解
- 编写java判断闰年_用Java程序判断是否是闰年的简单实例[通俗易懂]
- java %08d_总结Java中String.format()的使用[通俗易懂]
- JAVA的使用_Java集成开发环境
- Java转换流_java中的字符使用什么编码
- java webservice接口开发教程_JAVA入门教程
- java 数字信封_【Java密码学】使用Bouncy Castle生成数字签名、数字信封
- Java学习笔记之六java三种循环(for,while,do……while)的使用方法及区别详解编程语言
- Java多线程–并发中集合的使用之ConcurrentHashMap详解编程语言
- java enum(枚举)的使用详解编程语言
- [零] Java 语言运行原理 JVM原理浅析 入门了解简介 Java语言组成部分 javap命令使用详解编程语言
- java枚举使用详解编程语言
- 如何使用Java连接MySQL数据库(java怎么连接mysql数据库)
- 使用Java操作Redis数据库(java中使用redis)
- 分布式Java实现Redis分布式:从入门到精通(java实现redis)
- 时间使用Java设置Redis键过期时间(redisjava过期)
- 机制使用Redis Java实现过期机制(redisjava过期)
- Java学习Linux基础的必要性(java要学linux)
- 使用Redis存储Java对象(redis存java对象)
- 时间解决Java使用Redis设置过期时间(redisjava过期)
- 时使用Java操作Redis实现过期时间控制(redisjava过期)
- 掌握必备技能:Linux下Java命令的使用(java命令linux)
- Java文件在Linux系统中的使用(java文件linux)
- Linux 服务器快速部署Java开发环境(linux配置java)
- Java数据库之MySQL学习使用教程(mysql中java教程)
- C#/Java连接sqlite与使用技巧