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的简单了解的更多相关文章

  1. mysql中set和enum使用(简单介绍)

    简单介绍 SET类型 在创建表时,就指定SET类型的取值范围. 属性名 SET('值1','值2','值3'...,'值n') 其中,“属性名”参数指字段的名称:“值n”参数表示列表中的第n个值,这些 ...

  2. 使用enum建立简单的状态机

    Overview The enum in Java is more powerful than many other languages which can lead to surprising us ...

  3. Enum枚举 简单的使用

    在枚举中使用抽象方法 /** * 为枚举类定义一个抽象方法,<br/> * 这个抽象方法由不同的枚举值提供不同的实现 * * @author wangzhu * @date 2014-9- ...

  4. Enum的简单扩展

    1 添加一个描述的Attribute public enum MessageResult { [System.ComponentModel.Description("未通过")] ...

  5. Enum引发的血案,反思

    前几天公司产品更新版本,更新完后不少用户反应原先保存的report的一些表在新版本打开后设置突然变了,本来选的第六个,现在打开变成第四个了.领导要求赶紧查出原因修改好,发紧急补丁.啊啊..发紧急补丁可 ...

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

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

  7. java枚举类型enum的使用

    2015-10-24 java达人 Java 中 的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型.要了解枚举类型,建议大家先打开jdk 中的E ...

  8. java中enum类型的使用

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

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

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

随机推荐

  1. 修改OpenSSL默认编译出的动态库文件名称

    在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中 ...

  2. 分享一个获取代理ip的python函数

    分享一个获取代理ip的python函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #coding:utf-8 from bs4 import Beaut ...

  3. 基于visual Studio2013解决面试题之1101差值最小

     题目

  4. VC Office2007界面对话框实现

    我们知道VS2008SP1之后,MFC就多了一个功能包,可以快速的建立一个ribbon的界面,视觉样式可以在office 2007蓝.黑等颜色之间切换,这对于单文档/多文档做界面非常方便,而且也蛮好看 ...

  5. Android UI 学习 自定义的布局 平滑移动 VelocityTracker()

    /**  * Helper for tracking the velocity of touch events, for implementing  * flinging and other such ...

  6. xcode-build/version-bump

    # xcode-build-bump.sh # @desc Auto-increment the build number every time the project is run. # @usag ...

  7. axure制作项目符号列表样式

    1. 拖动文本面板到页面编辑区域 2. 点击工具栏的[项目符合列表] 来自:非原型不设计

  8. Unknown database 'DB_NAME'

    Cannot create PoolableConnectionFactory (Unknown database 'DB_NAME'): com.mysql.jdbc.exceptions.jdbc ...

  9. C keyword register 并讨论共同使用嵌入式汇编

    C keyword register 并讨论共同使用嵌入式汇编 register 是C99 的keyword之中的一个. register 是储存类型之中的一个.这里仅讨论register 储存类型. ...

  10. CSDN头版头条 《近匠》 Wijmo 5 CTO:从Web到移动,我的25年编程生涯

    现年52岁的Bernardo Castilho先生是GrapeCity(中文名为葡萄城)ComponentOne公司的CTO,在与他的对话过程中.充满风趣严谨和厚重的历史感. 当作为年轻人的我们崇拜着 ...