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(" ...
随机推荐
- Linux命令——parted
参考:8 Linux ‘Parted’ Commands to Create, Resize and Rescue Disk Partitions 简介 parted是磁盘分区操作工具,支持多种磁盘分 ...
- ELK-Elasticsearch 基础使用
一.基本概念 1 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例.单个 Elastic 实例称为一个节点( ...
- TPA测试项目管理系统-测试用例管理
Test Project Administrator(简称TPA)是经纬恒润自主研发的一款专业的测试项目管理工具,目前已广泛的应用于国内二十余个整车厂和零部件供应商.它可以管理测试过程 ...
- Codeforces A. Game on Tree(期望dfs)
题目描述: Game on Tree time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- moviepy这个版本,除了字幕,基本可用
只是注意,开头要坚拍,中间要横拍,结尾图左上右下. 哈哈,如果不是这样,那就要调调角度了. from moviepy.editor import * from moviepy.video.tools. ...
- jmeter设置代理服务器录制脚本
新建测试计划之后: 1.添加非测试元件:HTTP代理服务器 a.其中目标控制器可以控制选哪个线程放录制的脚本: b.将端口设置为8888或者其他不常用的端口,保持跟其他应用的端口不一致,否则被占用导致 ...
- win10设置以管理员身份开机启动
首先是右键程序,然后设置了管理员权限启动.但是在这样设置之后原先的开机机启动就失效了. 在谷歌之后发现有人通过计划任务开机启动.于是就试了试.别人设置的是用户登录时,我改成了开机就启动.就是这样一改, ...
- Vue和微信小程序区别
一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩 ...
- vue 的computed 和 watch 两者的区别
computed是计算属性,依赖其他属性计算,并且computed的值有缓存,只有当计算值发生变化才会返回内容. computed 用来监控自己定义的变量,该变量不在data里面声明,直接在compu ...
- Logistic Regression Algorithm
逻辑回归算法LR. 简介 逻辑回归是机器学习从统计学领域借鉴的另一种技术.它是二进制分类问题的首选方法(有两个类值的问题). Logistic回归就像线性回归,目标是找到权重每个输入变量的系数值. ...