[2014-09-02]JAVA笔记_枚举(Enumeration)
来源:互联网 发布:汉字笔顺演示软件下载 编辑:程序博客网 时间:2024/05/18 22:12
一、枚举简介
JDK1.5加入了了一个全新类型的“类” ——枚举类型。为此JDK1.5引入了一个新的关键字 enum。
//枚举的定义与使用package com.bob.test;public enum Color {Red, White, Bule;// 编译期间就已经确定Color这个类型有3个对象public static void main(String[] args) {Color myColor = Color.White; //使用名称. 的方式访问System.out.println(myColor);}}
·枚举类型还提供了两个有用的静态方法values() 和 valueOf(). 我们可以很方便的使用他们。
//枚举的定义与使用package com.bob.test;public enum Color {Red, White, Bule;// 定义public static void main(String[] args) {Color myColor = Color.White;System.out.println(myColor);System.out.println("-------------------");for(Color color : Color.values()){//values()返回一个数组System.out.println(color);}}}
package com.bob.test;public class EnumTest {public static void doOp(OpConstant opConstant){//将枚举作为方法参数传递switch(opConstant){case TURN_LEFT:System.out.println("左转");break;case TURN_RIGHT :System.out.println("右转");break;case SHOOT :System.out.println("射击");break;}}public static void main(String[] args) {doOp(OpConstant.TURN_LEFT);//调用方法,传递枚举类型的值}}enum OpConstant{TURN_LEFT, TURN_RIGHT, SHOOT;}
·定义枚举类型时本质上就是在定义一个类别,只不过很多细节有编译器帮您完成了,所以某些程度上,enum 关键字的作用就像是 class 或 Interface。
·当您使用“enum” 定义枚举类型时,实质上您定义出来的类型继承自 java.lang.Enum 类,但枚举本身并不是类。而每个枚举的成员其实就是您定义的枚举类型的一个实例(Instance)(换句话说,当定义了一个枚举后,在编译时刻就能确定该枚举有几个实例,分别是什么。在运行期间我们无法在使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确确定下来了)。他们都被预设为final, 所以您无法改变他们,他们也是 static 成员, 所以您可以通过类型名称直接使用他们,当然最重要的,他们都是公开的(public)。
package com.bob.generics;public enum Coin {//枚举本身也是一个类别,只是在编译期间就已经确定下了类别中的对象个数penny("hello"), nikel("world"), dime("welecom"), quarter("hello world");//调用枚举的构造private String value;//每个对象维护自己的成员变量public String getValue(){//枚举和类一样也可以定义成员变量和方法return value;}private Coin(String value){//枚举构造方法必须是私有的,因为编译期间就需要生成对象this.value = value;}public static void main(String[] args) {Coin coin = Coin.quarter;//因为枚举编译期间就已经确定了有多少实例,所以不能通过new的方式。System.out.println(coin.getValue());}}
二、 EnumSet 集合
package com.bob.generics;import java.util.EnumSet;import java.util.Iterator;enum FontConstant{Plain, Bold, Italilc;}public class EnumSetDemo {public static void main(String[] args) {EnumSet<FontConstant> enumSet = EnumSet.of(FontConstant.Bold);//使用枚举值构造集合showEnumSet(enumSet);System.out.println("-----------------");showEnumSet(EnumSet.complementOf(enumSet));//互补}public static void showEnumSet(EnumSet<FontConstant> enumSet){//传递一个集合for(Iterator<FontConstant> iter = enumSet.iterator(); iter.hasNext(); ){System.out.println(iter.next());}}}
三、 EnumMap
package com.bob.generics;import java.util.EnumMap;import java.util.Map;public class EnumMapDemo {public static void main(String[] args) {Map<Action, String> map = new EnumMap<Action, String>(Action.class);//必须接受枚举类型的keymap.put(Action.TURN_RIGHT, "向右转");map.put(Action.TURN_LEFT, "向左转");map.put(Action.SHOOT, "射击");for(Action action : Action.values()){System.out.println(map.get(action));//按枚举成员变量循序打印}}}enum Action{TURN_LEFT, TURN_RIGHT, SHOOT;}
四、 枚举的实际应用
一般在规定了可接受的参数时可以选择使用枚举。比如可以接受,1,2,3,4,5等这种有限的值时候可以选择使用枚举。
范例:访问权限
package com.bob.generics;public enum AccessRight {MANAGER, DEPARTMENT, EMPLOYEE;}
package com.bob.generics;public class AccessContorl {public static boolean checkRight(AccessRight accessRight){if(accessRight == AccessRight.MANAGER){return true;}else if(accessRight == AccessRight.DEPARTMENT){return false;}else if(accessRight == AccessRight.EMPLOYEE){return false;}return false;}public static void main(String[] args) {//valueOf()方法会自动将字符串转换成枚举类型,只要字符串的值与枚举类型的成员变量值相同即自动转换AccessRight accessRight = AccessRight.valueOf("MANAGER");System.out.println(checkRight(accessRight));}}
0 0
- [2014-09-02]JAVA笔记_枚举(Enumeration)
- Java枚举Enumeration接口
- 枚举 Enumeration
- 枚举 enumeration
- 枚举enumeration
- 枚举-enumeration
- Java Enumeration (枚举类型) (1) -- 基本概念
- JAVA中的Enumeration Class(枚举类)
- Java: 枚举(enumeration)和常量的区别
- Java Notes:枚举 (Enumeration)的意义和使用
- 枚举法(Enumeration)
- Enumeration 枚举、列举
- scala.Enumeration 枚举示例
- fast enumeration/快速枚举
- Enumeration 枚举器
- java Enumeration
- Java Enumeration
- java Enumeration
- RailsCast26 Hackers Love Mass Assignment rails中按params创建、更新model时存在的安全隐患
- Linux下对磁盘分区、文件系统和目录结构认识
- java字符编码转换研究(转)
- js调试中的常见错误
- hdu 4871 Shortest-path tree 树分治
- [2014-09-02]JAVA笔记_枚举(Enumeration)
- J2SE复习之超类
- eclipse中Editors does not contain a main type 图解处理方法
- Ubuntu 开机自动挂载NTFS分区
- Practice-1
- C++泛型算法
- Longest Substring Without Repeating Characters Leetcode
- HDU 3996 Gold Mine(最小割---最大权闭合)
- 非常不错的弹出一个div的js代码