目录

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 枚举使用总结的更多相关文章

  1. Java 枚举用法详解

    概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...

  2. java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...

  3. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  4. 【转】Java 枚举7常见种用法

    原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu  原创地址:http://blog.li ...

  5. 【转】掌握java枚举类型(enum type)

    原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...

  6. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  7. Java枚举类使用

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...

  8. Java 枚举类型简介

    目录 Java 枚举示例 Java 枚举构造函数 枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类.枚举类型可以包含常量.方法等.在 java5 中添加了 ...

  9. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  10. 使用javap进行反编译Java枚举

    这是一个枚举类Day.java public enum Day { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY(" ...

随机推荐

  1. SPI bus 的收发编程

    https://linux-sunxi.org/SPIdev The SPI bus (or Serial Peripheral Interface bus) is a synchronous ser ...

  2. Docker容器网络篇

    Docker容器网络篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Docker的网络模型概述 如上图所示,Docker有四种网络模型: 封闭式网络(Closed conta ...

  3. Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级

    原文链接:https://blog.csdn.net/tongdanping/article/details/79647337 1.锁升级锁的4中状态:无锁状态.偏向锁状态.轻量级锁状态.重量级锁状态 ...

  4. 编译heartbeat出现的问题

    如报 cc1: warnings being treated as errors pils.c:245: error: initialization fromincompatible pointer ...

  5. mysql终止当前正在执行的sql语句

    show processlist;找出你要停止的语句然后找出你要终止的语句的idkill 248

  6. fastjson异常(字符串集合转成字符串数组)

    我是在项目中,因为受到一个string类型的list集合,然后需要把这个字符串发送给前端,进行解析. 但是前端收到的是一个字符串,不能进行解析. 所以采用 ArrayUtils.clone(JSONO ...

  7. Vue移动端项目如何使用手机预览调试

  8. 11 open source business models

    https://www.zdnet.com/article/11-open-source-business-models/ Critics are always claiming open sourc ...

  9. 洛谷 P3469 [POI2008]BLO-Blockade 题解

    一道经典的割点例题,用size数组记录该子树有多少个节点,sum是这棵搜索树上有多少个节点,sum*(n-sum-1)是将点删掉后的数对数量. #include<iostream> #in ...

  10. 为啥用DTO

    0.部分参数对于开发前端的人来说是无意义的,因为传递也没有效果.所以不应该暴露给前端使用. 1.依据现有的类代码,即可方便的构造出DTO对象,而无需重新进行分析. 2.减少请求次数,大大提高效率. 3 ...