Enum的简单了解
Enum可以将一组具名的有限集合创建成一种新的类型,而这些具名的值可以作为常规的程序组件使用。
在创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum,所以enum本身也是一个类。
package myenums;
public enum Color {
RED,
ORANGE,
YELLOW,
GREEN,
BLUE,
PURPLE
}
package myenums;
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
enum中所有的枚举值,都是这个类静态常量。
可以使用==来比较enum实例,编译器会自动为你提供equals和hashCode方法。
package me.benzeph.myenums; import org.junit.Test; import static myenums.Color.BLUE;
import static myenums.Color.RED;
import static myenums.Day.MONDAY;
import static myenums.Day.THURSDAY;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat; public class MyEnumTest {
@Test
public void shouldReturnTrue() {
assertFalse(MONDAY == THURSDAY);
assertFalse(BLUE == RED);
assertThat(BLUE, is(BLUE));
}
}
除了不能继承一个enum,基本可以将enum看做一个常规的类。
如果打算在enum中定义自己的方法,必须在enum实例序列的最后添加一个分号,同时必须先定义一个enum实例(在方法之前)。
package myenums;
public enum Color {
RED("red"),
ORANGE("orange"),
YELLOW("yellow"),
GREEN("green"),
BLUE("blue"),
PURPLE("purple");
String value;
private Color(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
在switch中使用enum,是enum提供的一个非常方便的功能。
package me.benzeph.myenums; import myenums.Color;
import org.junit.Test; import static myenums.Color.*;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat; public class MyEnumTest {
@Test
public void shouldReturnBlue() {
assertThat(choose(BLUE), is("blue"));
} private String choose(Color color) {
String value;
switch (color) {
case RED:
value = RED.getValue();
break;
case GREEN:
value = GREEN.getValue();
break;
case BLUE:
value = BLUE.getValue();
break;
default:
value = "colorful";
}
return value;
}
}
values()方法,可以得到enum中所有元素的数组。
package me.benzeph.myenums; import myenums.Color;
import org.junit.Test; import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat; public class MyEnumTest {
@Test
public void shouldReturn6() {
assertThat(Color.values().length, is(6));
}
}
如果你研究一下父类Enum,你会发现它并没有values()方法。
values()方法是由编译器添加的static方法。
参考文献:
《Thinking In Java》
http://www.cnblogs.com/frankliiu-java/archive/2010/12/07/1898721.html
http://softbeta.iteye.com/blog/1185573
Enum的简单了解的更多相关文章
- mysql中set和enum使用(简单介绍)
简单介绍 SET类型 在创建表时,就指定SET类型的取值范围. 属性名 SET('值1','值2','值3'...,'值n') 其中,“属性名”参数指字段的名称:“值n”参数表示列表中的第n个值,这些 ...
- 使用enum建立简单的状态机
Overview The enum in Java is more powerful than many other languages which can lead to surprising us ...
- Enum枚举 简单的使用
在枚举中使用抽象方法 /** * 为枚举类定义一个抽象方法,<br/> * 这个抽象方法由不同的枚举值提供不同的实现 * * @author wangzhu * @date 2014-9- ...
- Enum的简单扩展
1 添加一个描述的Attribute public enum MessageResult { [System.ComponentModel.Description("未通过")] ...
- Enum引发的血案,反思
前几天公司产品更新版本,更新完后不少用户反应原先保存的report的一些表在新版本打开后设置突然变了,本来选的第六个,现在打开变成第四个了.领导要求赶紧查出原因修改好,发紧急补丁.啊啊..发紧急补丁可 ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- java枚举类型enum的使用
2015-10-24 java达人 Java 中 的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的E ...
- java中enum类型的使用
java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我 ...
- 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)
java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...
随机推荐
- leetcode:Reverse Nodes in k-Group(以k为循环节反转链表)【面试算法题】
题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...
- 平均时间复杂度为O(nlogn)的排序算法
本文包括 1.快速排序 2.归并排序 3.堆排序 1.快速排序 快速排序的基本思想是:采取分而治之的思想,把大的拆分为小的,每一趟排序,把比选定值小的数字放在它的左边,比它大的值放在右边:重复以上步骤 ...
- C#获取千分位,给数字加逗号分隔符
/// <summary> /// 对数字添加”,“号,可以处理负数以及带有小数的情况 /// </summary> /// <param name="vers ...
- checkbox探究
介绍checkbox checkbox: A check box. You must use the value attribute to define the value submitted by ...
- 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox
原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox 很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结.因为实践是经验的来源,总结 ...
- XSS漏洞解决方案之一:过滤器
一:web.xml文件 <!-- 解决xss漏洞 --> <filter> <filter-name>xssFilter</filter-name> ...
- 基于visual Studio2013解决面试题之1004最长等差数列
题目
- net core VS goang web
asp.net core VS goang web[修正篇] 先前写过一篇文章:http://www.cnblogs.com/gengzhe/p/5557789.html,也是asp.net core ...
- EXT2/EXT3文件系统(一)
整理自<鸟哥的Linux私房菜>,整理者:华科小涛http://www.cnblogs.com/hust-ghtao/ 1.文件系统概念引入 文件系统是一种存储和组织计算机数据的方法,它使 ...
- [置顶] Embedded Server:像写main函数一样写Web Server
1.传统的JEE Web Server 传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tom ...