目录

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. SQLAlchemy的应用创建

    1.首先创建app文件夹 同django 创建app 一样 创建文件 在创建的views中写入两个蓝图函数为了操作数据库的增删改查 acc.py from flask import Blueprint ...

  2. ajax、axios、fetch 对比

    前言 今天在看到一个比较好的插件,写一个示例时,由于需要请求在线数据,官方给的是用 $.get(),就为了一个示例使用 JQuery 没必要. 又找了找,发现有用 fecth 的,挺方便,这里就做一个 ...

  3. 0031ActiveMQ的下载安装与启动

    消息中间件activemq的作用主要是解耦.异步.削峰. 我们按如下步骤详细讲解一下activemq的下载.安装与启动. 1.activemq的下载 下载地址: http://activemq.apa ...

  4. jq function return value

    所有 JS  函数 都会返回值 假如 没有 return  则返回 undefined

  5. JQuery系列(2) - 事件处理

    JQuery事件绑定 (1)on方法 on方法是jQuery事件绑定的统一接口.后面介绍的事件绑定的那些简便方法,其实都是on方法的简写形式. $('li').on('click', function ...

  6. python 查询文件修改python lib 库文件

    运行code import os, time import sys import re def search(path, name): for root, dirs, files in os.walk ...

  7. javascript慕课入门

    1.javascript引用 html里引用: <script type="text/javascript"> ... ... </script> 引用外部 ...

  8. RSDS pdb格式

    本描述了“RSDS”或“DS”类型的pdb(程序数据库)文件的格式,这些文件是由Miscrosoft的link.exe从版本7及更高版本发出的. 什么是PDB文件? 如果选择了/DEBUG选项或/DE ...

  9. NetHack 备忘

    NetHack 备忘 常用操作 操作均区分大小写 上下左右移动 y k u h l b j n / 查看地图上的东西 < 上楼 > 下楼 c 关门 部分怪不会开门 a 使用(工具) d 丢 ...

  10. 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解

    P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...