`

enum使用方法

 
阅读更多

 JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便。
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static final....现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

 

public enum Color {  
 RED, GREEN, BLANK, YELLOW  
}  

 用法二: switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

enum Signal {  
    GREEN, YELLOW, RED  
}

public class TrafficLight {

	public void change(Signal color) {
		switch (color) {
		case RED:
			System.out.println("红色");
			break;
		case YELLOW:
			System.out.println("绿色");
			break;
		case GREEN:
			System.out.println("绿色");
			break;
		}
	}
}

  

 用法三: 向枚举中添加新方法
 
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

public enum Color {
	// 如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
	RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
	// 成员变量
	private String name;
	private int index;
	// 构造方法(只能为私有)
	private Color(String name, int index) {
		this.name = name;
		this.index = index;
	}
	// 普通方法
	public static String getName(int index) {
		for (Color c : Color.values()) {
			if (c.getIndex() == index) {
				return c.name;
			}
		}
		return null;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getIndex() {
		return index;
	}
	public void setIndex(int index) {
		this.index = index;
	}
	public String toString() {
		return this.index + "_" + this.name;
	}
}

 四、枚举项实例

import java.util.EnumMap;
import java.util.EnumSet;

public class LightTest {
	// 1.定义枚举类型
	public enum Light {
		// 利用构造函数传参
		RED(1), GREEN(3), YELLOW(2);
		// 定义私有变量
		private int nCode;
		// 构造函数,枚举类型只能为私有
		private Light(int _nCode) {
			this.nCode = _nCode;
		}
		@Override
		public String toString() {
			return String.valueOf(this.nCode);
		}	
	}
	public static void main(String[] args) {
		// 1.遍历枚举类型
		System.out.println("演示枚举类型的遍历 ......");
		testTraversalEnum();
		// 2.演示EnumMap对象的使用
		System.out.println("演示EnmuMap对象的使用和遍历.....");
		testEnumMap();
		// 3.演示EnmuSet的使用
		System.out.println("演示EnmuSet对象的使用和遍历.....");
		testEnumSet();
	}
	/**	 * 
	 * 演示枚举类型的遍历
	 */
	private static void testTraversalEnum() {
		Light[] allLight = Light.values();
		for (Light aLight : allLight) {
			//枚举项实例默认属性name,即常量本身
			System.out.println("当前灯name:" + aLight.name());
			//枚举项实例默认方法, 即位置
			System.out.println("当前灯ordinal:" + aLight.ordinal());
			//打印toString方法
			System.out.println("当前灯:" + aLight);
		}
	}
	/**
	 * 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key要是枚举类型
	 */
	private static void testEnumMap() {
		// 1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型
		EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(Light.class);
		currEnumMap.put(Light.RED, "红灯");
		currEnumMap.put(Light.GREEN, "绿灯");
		currEnumMap.put(Light.YELLOW, "黄灯");
		// 2.遍历对象
		for (Light aLight : Light.values()) {
			System.out.println("[key=" + aLight.name() + ",value="+ currEnumMap.get(aLight) + "]");
		}
	}
	/**
	 * 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容<BR/>
	 * 可以使用allOf方法
	 */
	private static void testEnumSet() {
		EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);
		for (Light aLightSetElement : currEnumSet) {
			System.out.println("当前EnumSet中数据为:" + aLightSetElement);
		}
	}
}

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics