Java 枚举使用总结
目录
1、枚举基础
1.1、创建枚举最简单的方式
1.2、简单使用
2、枚举的构造方法
2.1、使用注释方式说明
2.2、使用构造方法
2.3、使用带有构造器的枚举
3、就这些了?
3.1、需求
3.2、使用Map实现
3.3、枚举结合Map
1、枚举基础
1.1、创建枚举最简单的方式
package cn.ganlixin.demo.enums; /**
* 描述: 季节枚举类
*/
public enum SeasonEnum { // 枚举值之间使用逗号隔开,而不是分号
SPRING, SUMMER, AUTUMN, WINNER;
}
1.2、简单使用
@Test
public void testUseSeasonEnum() {
System.out.println(SeasonEnum.AUTUMN); // AUTUMN // 获取枚举类中定义的所有枚举项(每一项都是枚举,而不是字符串)
final SeasonEnum[] values = SeasonEnum.values();
for (SeasonEnum season : values) {
System.out.print(season +" "); // SPRING SUMMER AUTUMN WINTER
} // 根据传入的字符串,获取与字符串同名的枚举项(如果没有字符串同名的枚举项,则会报错)
final SeasonEnum winter = SeasonEnum.valueOf("WINTER");
System.out.println(winter); // WINTER // 枚举项的比较
System.out.println(SeasonEnum.WINTER == SeasonEnum.WINTER); // true
// 字符串不能直接与枚举进行比较
//System.out.println("WINTER" == SeasonEnum.WINTER);
// System.out.println(Objects.equals("WINTER", SeasonEnum.WINTER)); // false
}
2、枚举的构造方法
2.1、使用注释方式说明
虽然可以通过给枚举项增加注释的方式来表达枚举项的含义,但是对于打包发布后,注释是删掉的,这时就不好了
package cn.ganlixin.demo.enums; /**
* 描述: 季节枚举类
*/
public enum SeasonEnum { // 枚举值之间使用逗号隔开,使用注释的方式说明枚举项的含义
SPRING, // 春天
SUMMER, // 夏天
AUTUMN, // 秋天
WINTER; // 冬天
}
2.2、使用构造方法
package cn.ganlixin.demo.enums; /**
* 描述: 季节枚举类
*/
public enum SeasonEnum { // 枚举值定义。枚举值之间使用逗号隔开,使用构造方法设置
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天"); // 枚举项的说明(比如注释"春天")
String description;
// 还可以自己加其他字段 // 创建一个构造方法
SeasonEnum(String description) {
this.description = description;
} // 获取枚举项描述
public String getDescription() {
return description;
} // 一般不建议提供setter,因为枚举类不应该被改变(包括信息描述)
// public void setDescription(String description) {
// this.description = description;
// }
}
需要注意的是,上面SeasonEnum的各部分代码顺序不能更改,也就是说枚举项定义必须在其他代码之前(包括构造方法、属性、getter)。
2.3、使用带有构造器的枚举
@Test
public void testSeasonEnumWithConstructor() {
System.out.println(SeasonEnum.AUTUMN); // AUTUMN // 每一个枚举项都默认包含name方法,返回枚举项的字符串类型
System.out.println(SeasonEnum.AUTUMN.name()); // AUTUMN // 调用方法获取枚举项的描述
System.out.println(SeasonEnum.AUTUMN.getDescription()); // 秋天
}
3、就这些了?
看完上面的定义和使用方式,你觉得枚举就这些了吗?的确,枚举就这内容,但是在真实开发工作中,还是不够的。
3.1、需求1
比如,我想根据一个字符串,获取枚举类中同名的枚举项,但是返回的是枚举项的描述:
伪代码如下:
String item = "xxx"; // 传入字符串获取对应的描述,而不是枚举项
String desctiption = SeasonEnum.getDescription(item);
3.2、使用Map实现
一个简单的方式就是通过使用不可变Map来实现,这里就不掩饰了
3.3、枚举结合Map
可以使用枚举和Map结合的方式,既保留了枚举的功能,也可以使用Map的功能
package cn.ganlixin.demo.enums; import java.util.HashMap;
import java.util.Map; /**
* 描述: 季节枚举类
*/
public enum SeasonEnum { // 枚举值之间使用逗号隔开,使用构造方法设置
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天"); // 用来存枚举项(字符串类型)与description的对应关系
private static final Map<String, String> SeasonEnumMap = new HashMap<>(); static {
// 将枚举项的名称与描述存入map
for (SeasonEnum season : values()) {
SeasonEnumMap.put(season.name(), season.getDescription());
}
} // 枚举项的说明(比如注释"春天")
String description; // 创建一个构造方法
SeasonEnum(String description) {
this.description = description;
} // 获取枚举项描述
public String getDescription() {
return description;
} /**
* 根据字符串类型的枚举项,获取描述
* @param season
* @return
*/
public static String fromSeasonName(String season) {
return SeasonEnumMap.get(season);
}
}
使用示例
@Test
public void testEnumWithMap() {
System.out.println(SeasonEnum.fromSeasonName("WINTER")); // 冬天 System.out.println(SeasonEnum.fromSeasonName("NotExists")); // null
}
Java 枚举使用总结的更多相关文章
- Java 枚举用法详解
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- 【转】Java 枚举7常见种用法
原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu 原创地址:http://blog.li ...
- 【转】掌握java枚举类型(enum type)
原文网址:http://iaiai.iteye.com/blog/1843553 1 背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...
- 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)
java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...
- Java枚举类使用
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- Java 枚举类型简介
目录 Java 枚举示例 Java 枚举构造函数 枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类.枚举类型可以包含常量.方法等.在 java5 中添加了 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- 使用javap进行反编译Java枚举
这是一个枚举类Day.java public enum Day { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY(" ...
随机推荐
- angular官网实例(综合)
第一部分: (应用的“外壳”) 1.新建项目: ng new mytest 2.进入项目目录,并启动这个应用. cd mytest ng serve --open 3.添加一个标题 打开 app.co ...
- Linux命令——mount、umount
前言 由于引入了LVM.RAID技术,导致OS时别到的磁盘已经不单纯是事实意义上的物理磁盘(虽然OS认为他是物理盘).传统文件系统与分区可以认为是1:1关系,但是现在一个分区可以有多个FS,一个FS也 ...
- ES6开发环境准备及基础语法
ES6开发环境准备及基础语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 三.
- ZOJ - 2132:The Most Frequent Number(思维题)
pro:给定N个数的数组a[],其中一个数X的出现次数大于N/2,求X,空间很小. sol:不能用保存数组,考虑其他做法. 由于出现次数较多,我们维护一个栈,栈中的数字相同,所以我们记录栈的元素和个数 ...
- Kafaka 总结
Kafka是一个分布式的Streaming处理平台,Kafka可以用于数据库中数据的导入导出,也可以用于实时流的处理,但是Kafka最核心的功能就是作为分布式的消息中间件. Kafka集群是由多个Br ...
- Linux配置静态IP以及解决配置静态IP后无法上网的问题
式一.图形界面配置
- php读取外部txt文件内容并打印在页面|fopen()函数
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- gin+redis
var RedisDefaultPool *redis.Pool func newPool(addr string) *redis.Pool { return &redis.Pool{ Max ...
- Python 09 安装torch、torchvision
这个也是弄了我很久,百度了好多文章,其实像下面那样挺简单的,没那么复杂 1.进入torch的官网的下载页面,选择一下参数信息 地址:https://pytorch.org/get-started/lo ...
- Android入门教程(四)
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 学习Android要掌握Android程序结构,和通信技术,和如 ...