java之 ------ 枚举类型
枚举
一、枚举类型具体说明
简单的说。Enum一般用来表示一组同样类型的常量。
如性别、日期、月份、颜色等。对这些属性用常量的优点是显而易见的,不仅能够保证单例,且在比較的时候能够用”==”来替
换equals。JDK1.5之前没有Enum这个类型,那时候一般用接口常量来替代。
定义枚举类型时本质上就是在定义一个类别。仅仅只是非常多细节由编译器帮您完毕了。所以某些程度上,enum是一个keyword,它的作用就像是class或interface。(这就是为什么有些人找不到当中的value()方法)
二、枚举类型的用法
1)常量
在Enum出现之前,我们定义常量通常是:public static fianl.... 这种常量比較单一。而有了枚举就好的多,它能够看成是对象常量,并且还有相似集合的功能,同一时候定义多个对象常量。
如:
<span style="font-size:14px;">enum Signal {
GREEN, YELLOW, RED;
} </span>
用的时候:Signal s = Signal.RED;即可了
注:用这个方案使用枚举类型,RED后面的分号能够不用写
2)switch
<span style="font-size:14px;">public class TrafficLight {
Signal color = Signal.RED;
public void change() { //交通灯切换
switch (color) {
case RED: color = Signal.GREEN; break;
case YELLOW: color = Signal.RED; break;
case GREEN: color = Signal.YELLOW; break;
}
}
} </span>
3)向枚举中加入新方法
<span style="font-size:14px;">public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4) ;
// 成员变量
private final String name;
private final int index;
// 构造方法,必须私有
private Color(String name, int index) {
this.name = name;
this.index = index;
}
public String getName() { return name; }
public int getIndex() { return index; }
}
</span>
由于是常量,所以不能让其它人能够new这个对象。也就是将这个类封装起来。不让不论什么人能够new。方法是通过将构造方法私有化即可。private Color(String name, int index)
注:假设打算自己定义自己的方法。那么必须在enum实例序列的最后加入一个分号。
也就是这里的YELLOW("黄色",4)后面必须有“ ; ”。
三、枚举的静态方法
枚举的静态方法有两个
1)values()获取枚举类型的全部枚举常量返回值为static ElementType[]
for(UserTypeEnum userType: UserTypeEnum.values()){
<span style="white-space:pre"> </span>if(userType.getName().equalsIgnoreCase(name)){
return userType.getType();
}
}
2)valueOf(Class<T>
enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。返回值为static ElementType
注:然后就发现一个问题,value方法我怎么找不到,查查才发现。 values()方法是编译器插入到enum定义中的static方法。所以,当你将enum实例向上转型为父类Enum类,
values()就不可訪问了。
解决的方法:在java.lang包下一个java.lang.annotation包(凝视的意思),里面有一个ELementType类,当中就有想要找的这两个静态方法。
所以不能说
枚举类型实质上继承java.lang.Enum类。
四、EnumSet类和EnumMap类
这两个类在java.util包中。看看api,主要的运用应该没什么问题。
java之 ------ 枚举类型的更多相关文章
- 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)
写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...
- 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...
- Java enum枚举类型
java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...
- Java的枚举类型使用方法详解
1.背景在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏 ...
- (转+原创)java的枚举类型Enum解释
原文:http://www.cnblogs.com/mxmbk/articles/5091999.html 下文中还添加了个人的一些补充和理解. 在Java SE5之前,我们要使用枚举类型时,通常会使 ...
- [转载] Java中枚举类型的使用 - enum
目录 1 枚举类的编译特性 2 向枚举类中添加方法 3 接口内部创建枚举 4 枚举类中使用枚举 5 扩展: 验证values()不是通过父类继承的 本文转载自博客 - Java枚举类型, 博主对原文内 ...
- Java的枚举类型
引用并转载于:http://blog.csdn.net/ishallwin/article/details/9440251 1.什么是枚举: 在实际编程中,往往存在着这样的“数据集”,它们的数值在程序 ...
- java中枚举类型的使用
Java 枚举(enum) 详解7种常见的用法 JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. web项目里实体类使用枚举类型: 一般在该实体 ...
- MyBatis(八):Mybatis Java API枚举类型转化的用法
最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...
随机推荐
- HDU 2102 A计划 (三维的迷宫BFS)
题目链接:pid=2102">传送门 题意: 三维的一个迷宫,起点在第一层的S(0,0,0)处,问是否能在规定的时间内走到第二层的P 处.'*'代表不能走,'.'代表能够走,'#'代表 ...
- Linux-清除rootpassword
1.Linux进入单用户模式,通常选择内核按e 最后加入single,按b进入单用户. 2.清除/etc/shadow中root这一行第一个:符号和第二个:符号之间内容. 3.正常启动,passwd ...
- Rsync 指令的使用方法
RsyncLinux版下载:http://rsync.samba.org/download.htmlWindows版下载:https://www.itefix.no/i2/cwrsync-get 选( ...
- 安装 VNC 和 XRDP
安装 VNC 和 XRDPapt-get install vnc4server tightvncserver xrdp fluxbox xtermcat >vncstop.sh << ...
- 22. Node.Js Buffer类(缓冲区)-(二)
转自:https://blog.csdn.net/u011127019/article/details/52512242
- Day3晚笔记
DEV C++扩展栈空间 -Wl,--stack=64000000000 带权二分图匹配 建一个超级源点S,超级汇点T 把左边的点的点权作为权值,连一条S到左边的点的边 把右边的点的点权作为权值,连一 ...
- powerdesigner逆向自动生成mysql说明文档、PDM
做EDI的项目的时候,用到相关工具powerdesigner,正好我们的一个项目对数据设计阶段时相关文档没有很好的保存下来,查找了一下powderdesigner相关文档,采用逆向工程,从mysql数 ...
- HDU 5389 Zero Escape (MUT#8 dp优化)
[题目链接]:pid=5389">click here~~ [题目大意]: 题意: 给出n个人的id,有两个门,每一个门有一个标号,我们记作a和b,如今我们要将n个人分成两组,进入两个 ...
- Linux体系结构
linux内核结构: system call interface (SCI层) 为用户空间提供了一套标准的系统调用函数来访问linux内核. process management (PM层) 进程管理 ...
- 跟我一起学extjs5(42--单个模块的数据新增方式)
跟我一起学extjs5(42--单个模块的数据新增方式) 前面的章节中已经增加了一个自己定义的模块,而且能够进行数据的新增.改动.删除的操作了,在这个基础上就能够大作文章了. 这一节来 ...