[2014-09-02]JAVA笔记_枚举(Enumeration)

一、枚举简介

        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);
		}
		
	}
}
枚举( Enum ): 我们所定义的每个枚举类型都继承自 java.lang.Enum 类,枚举中的每个成员默认都是 public static final 的。
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);	//必须接受枚举类型的key
		
		map.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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值