work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

枚举(Enum)

Posted on 2019-05-22 20:04  work hard work smart  阅读(231)  评论(0编辑  收藏  举报

enum是一个全新的“类”。

枚举(Enum): 我们所定义的每个枚举类型都继承自java.lang.Enum类。枚举中的每个成员都是public static final的。

当您使用“enum”定义枚举类型时,实质上您定义出来的类型继承自java.lang.Enum类型,而每个枚举的成员其实就是您定义的枚举类型的一个实例(Instance),他们都被预设为final,所有您无法改变他们,他们也是static成员,所以您可以通过类型名称直接使用他们,当然最重要的,他们都是公开的(public)

换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间已经完全确定下来了。

1、定义一个枚举

public enum Color {
	Red,White,Blue
}

  使用枚举

public class ColorTest {
	public static void main(String[] args) {
		Color myColor = Color.White;
		System.out.println(myColor);
	}
}

  

2、定义一个有成员变量的枚举

public class EnumTest {
	public static void doOp(OpConstant opConstant){
		switch (opConstant) {
		case TRUN_LEFT:
			System.out.println("向左转");
			break;
		case TRUN_RIGHT:
			System.out.println("向右转");
			break;
		case SHOOT:
			System.out.println("射击");
			break;
		}
	}
	
	public static void main(String[] args) {
		doOp(OpConstant.SHOOT);
	}
}

enum OpConstant{
	TRUN_LEFT, TRUN_RIGHT, SHOOT
}

  

定义枚举类型时本质上就是定义一个类别,只不过很多细节编译器帮您完成了。所有在某些程度上,enum关键字的作用就像是class或interface。

 

3、EnumSet的使用

enum AddressConst{
	BEIJING,
	SHANGHAI,
	HANGZHOU
}

public class EnumSetDemo {
	
	public static void showEnumSet(EnumSet<AddressConst> enumSet){
		for(Iterator<AddressConst> iter = enumSet.iterator(); iter.hasNext();){
			System.out.println(iter.next());
		}
	}
	
	public static void main(String[] args) {
		EnumSet<AddressConst> enumSet = EnumSet.of(AddressConst.BEIJING, AddressConst.SHANGHAI);
		showEnumSet(enumSet);
		System.out.println("-------");
		//出去enumSet的enum实例
		showEnumSet(EnumSet.complementOf(enumSet));
	}
}

   EnumSet.noneOf 方法的使用

public class EnumSetDemo2 {
	
	public static void showEnumSet(EnumSet<AddressConst> enumSet){
		for(Iterator<AddressConst> iter = enumSet.iterator(); iter.hasNext();){
			System.out.println(iter.next());
		}
	}
	
	public static void main(String[] args) {
		EnumSet<AddressConst> enumSet = EnumSet.noneOf(AddressConst.class);
		enumSet.add(AddressConst.BEIJING);
		enumSet.add(AddressConst.HANGZHOU);
		showEnumSet(enumSet);
	}
}

  

4.EnumMap使用

public class EnumMapDemo {
	
	public static void main(String[] args) {
		 Map<Action, String> map = new EnumMap<Action, String>(Action.class);
		 map.put(Action.PASUE, "暂停");
		 map.put(Action.STOP, "停止");
		 map.put(Action.START, "开始");
		 
		 for(Action action : Action.values()){
			 System.out.println(map.get(action));
		 }
	}
}