java 枚举使用教程
一、概述
一、枚举型常量
首先枚举是一个特殊的class,这个class相当于final static修饰,不能被继承;
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类;
他的构造方法强制被私有化,下面有一个默认的构造方法private ColorEnum();
/**
* 每个枚举变量都是枚举类ColorEnum的实例,相当于RED=new ColorEnum(1),按序号来;
* 每个成员变量都是final static修饰;
*/
enum ColorEnum {
RED, GREEN, BLANK, YELLOW;
} //测试
public class Test {
public static void main(String[] args) {
//ordinal返回枚举变量的序号
for(ColorEnum color:ColorEnum.values()) {
System.out.println(color+" ordinal:"+color.ordinal()+" name:"+color.name());
}
// RED ordinal:0 name:RED
// GREEN ordinal:1 name:GREEN
// BLANK ordinal:2 name:BLANK
// YELLOW ordinal:3 name:YELLOW
}
}
二、带一个参数的枚举
enum TypeEnum {
FIREWALL("firewall"),
SECRET("secretMac"),
BALANCE("f5");
private String typeName;
TypeEnum(String typeName) {
this.typeName = typeName;
}
/**
* 根据类型的名称,返回类型的枚举实例。
* @param typeName 类型名称
*/
public static TypeEnum fromTypeName(String typeName) {
for (TypeEnum type : TypeEnum.values()) {
if (type.getTypeName().equals(typeName)) {
return type;
}
}
return null;
}
public String getTypeName() {
return this.typeName;
}
}
/**
* 测试
* type:是TypeEnum类实例化对象
* typeName:实例化对象type的值
* ordinal:实例化对象type的序号(int), 排序值(默认自带的属性 ordinal 的值)
* name:实化对象的名字(String),枚举名称(即默认自带的属性 name 的值)
*/
public class Test {
public static void main(String[] args) {
String typeName = "f5";
TypeEnum type = TypeEnum.fromTypeName(typeName);
System.out.println(type+",typeName:"+type.getTypeName()+",ordinal:"+type.ordinal()+",name:"+type.name());
//BALANCE,typeName:f5,ordinal:2,name:BALANCE
}
}
实际开发该怎么用呢?
package niing; //状态封装 (0 禁用 1启用 2删除)
enum DataStatus {
DISABLE("1")
,ENABLE("2")
,DELETE("3"); private final String status; DataStatus(String status){
this.status = status;
}
public String getStatus(){
return this.status;
}
} public class Test {
public static void main(String[] args) {
//DataStatus.DELETE获得的枚举对象 相当于 new DataStatus("3") 获得的对象;
System.out.println(DataStatus.DELETE); //DELETE
//在实际开发中这样去获取枚举中定义的常量,这就好比以前在接口或者公共类中定义的 private statis final String DELETE = "2";
System.out.println(DataStatus.DELETE.getStatus()); //3
}
}
三、向枚举中添加新方法
enum SeasonEunm {
//每一个枚举变量都是枚举类SeasonEunm的实例化;
//SeasonEunm.SPRING获得的对象相当于new SeasonEunm("春","春困") 获得的对象;
SPRING("春","春困"),SUMMER("夏","夏睡"),AUTUMN("秋","秋乏"),WINTER("冬","冬眠");
//强制私有化的构造方法,因为枚举类默认继承Eunm类,被final static修饰,不能被继承;
//由于被强制private,所以不能使用new去生成枚举对象;
//在SeasonEunm.SPRING获得对象,隐式调用了下面的构造方法;
// 构造方法 ,赋值给成员变量
private SeasonEunm(String name, String value) {
this.name = name;
this.value = value;
}
//添加成员变量的原因是,方便够着方法赋值,使用SeasonEunm.SPRING.getName就能获取对应的值;
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
//测试
public class Test {
public static void main(String[] args) {
//ordinal返回枚举变量的序号
for(SeasonEunm seasion:SeasonEunm.values()) {
System.out.println(seasion+",ordinal:"+seasion.ordinal()+",name:"+seasion.name());
System.out.println("枚举变量值:"+seasion.getName()+",枚举变量值:"+seasion.getValue());
}
// SPRING,ordinal:0,name:SPRING
// 枚举变量值:春,枚举变量值:春困
// SUMMER,ordinal:1,name:SUMMER
// 枚举变量值:夏,枚举变量值:夏睡
// AUTUMN,ordinal:2,name:AUTUMN
// 枚举变量值:秋,枚举变量值:秋乏
// WINTER,ordinal:3,name:WINTER
// 枚举变量值:冬,枚举变量值:冬眠
}
}
四、覆盖枚举的方法
enum RGBEnum {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法 ,赋值给成员变量
private RGBEnum(String name, int index) {
this.name = name;
this.index = index;
}
//覆盖方法 :只能使用toString方法来输出枚举变量值
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
//测试
public class Test {
public static void main(String[] args) {
for(RGBEnum rgb:RGBEnum.values()) {
System.out.println(rgb.toString());
}
// 1_红色
// 2_绿色
// 3_白色
// 4_黄色
}
}
二、使用
1. 根据值获取到枚举对象
定义了一个枚举:
@NoArgsConstructor
@AllArgsConstructor
@Getter
public enum StarEnum {
LiuYiFei("刘亦菲", 23),
ChenShu("陈数", 24),
WangOu("王鸥", 25); private String name;
private Integer age;
}
获取枚举对象:
package myEnum; import org.apache.commons.lang3.EnumUtils;
import java.util.List; /**
* @author zls
* @date 2020/3/6
*/
public class EnumTest {
public static void main(String[] args) {
List enumList = EnumUtils.getEnumList(StarEnum.class);
System.out.println("enumList = " + enumList);
// enumList = [LiuYiFei, ChenShu, WangOu] StarEnum chenShu = EnumUtils.getEnum(StarEnum.class, "ChenShu");
System.out.println("chenShu = " + chenShu); // chenShu = ChenShu }
}
建议使用lang3提供的枚举工具类,而不要使用lang,使用lang会报错,此外,你也可以利用反射自己封装适用于自己的工具类。
转载:https://blog.csdn.net/newbie_907486852/article/details/81027512
java 枚举使用教程的更多相关文章
- 秒懂系列,超详细Java枚举教程!!!
所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...
- Java 枚举用法详解
概念 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性. 在Java中,被 enum 关键字修饰的类型就是枚举类型.形式如下: enum Color { RED, GR ...
- Java log4j详细教程
Java log4j详细教程 http://www.jb51.net/article/74475.htm
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
- [转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )
7本免费的Java电子书和教程 1. Thinking in Java (Third Edition) 本书的作者是Bruce Eckel,它一直都是Java最畅销的免费电子书.这本书可以帮助你系统的 ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- 学习笔记之Java程序设计实用教程
Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...
- 【转】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常量.之前我们通常利用 ...
随机推荐
- supervise守护进程
通过二进制supervise文件可以直接对进程进行守护 ./supervise -f 要守护的程序 -p 守护信息存储位置 例如: ./supervise -f http_server -p s ...
- spring boot 整合 百度ueditor富文本
百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...
- Generator自动生成DAO和POJO代码
一 添加相关插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>myba ...
- SQL学习基础 => 创建表
--创建表 CREATE TABLE userinfo3 ( ID INT PRIMARY KEY NOT NULL, --ID 整数类型,设置为主键,并且不能为空 name ) NOT NULL, ...
- Remastersys打包你自己的ubuntu成iso文件
采用Remastersys3.0.4.ubuntu版本是ubuntu14.04 LTS amd64. (1)软件下载安装: 下载: 到http://www.easy-vdr.de/downloads/ ...
- hdu1693 插头dp
题意:给了一个矩阵图,要求使用回路把图中的树全部吃掉的方案树,没有树的点不能走,吃完了这个点也就没有了,走到哪吃到哪 用插头dp搞 #include <iostream> #include ...
- delphi 判断端口(Port)是否被占用(转载)
function IsPortUsed(aPort: Integer): Boolean; var _vSock: TSocket; _vWSAData: TWSAData; _vAddrIn: TS ...
- 从Node到Go的心路之旅
我最近将一个系统从Node重构到了Go,花了大概两周多的时间,这个过程也是不得已而为之,因为公司开发的系统最终需要部署到客户的服务器,而又不想暴露源码. 但是NodeJs开发的系统却无法从根本上来保护 ...
- drf 多表
https://www.django-rest-framework.org/ 官方站 https://www.django-rest-framework.org/tutorial/quickstar ...
- etcd v3 备份恢复
备份数据: # ETCDCTL_API=3 etcdctl --endpoints localhost:2379 snapshot save snapshot.db 恢复数据: # ETCDCTL_A ...