您的位置:首页 > 编程语言 > Java开发

java 枚举

2015-11-29 10:15 441 查看
一、为什么使用枚举

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

面对这样的常量我们往往使用 public final static 去定义,而使用Enum枚举类型,可以将以前笨拙的代码变得优雅简单!

二、枚举的特点

1.枚举类型的每一个值都将映射到
protected Enum(String name, int ordinal)
构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

2.他是个普通的类,它已经继承了Enum (java 是单继承)所以他不能继承其他类了。

public enum EnumTest {
//使用枚举定义常量
RED(1), GREEN(2) , YELLOW(3) ;
private int code;
// 构造函数,枚举类型只能为私有
private EnumTest(int code){
this.code=code;
}
public String toString(){
return String.valueOf(this.code);
}
/**
*   演示枚举类型的遍历
*/
private static void testTraversalEnum() {
EnumTest[] enumTest = EnumTest.values ();
for (EnumTest eEnumTest : enumTest) {
System. out .println( " 当前灯 name : " + eEnumTest.name());
System. out .println( " 当前灯: " + eEnumTest);
System. out .println( " 当前灯 ordinal : " + eEnumTest.ordinal());
}
}
/**
*   演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不过 key 要是枚举类型
*/
private static void testEnumMap() {
// 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型
EnumMap<EnumTest, String> currEnumMap = new EnumMap<EnumTest, String>(EnumTest.class );
currEnumMap.put(EnumTest.RED , "红灯");
currEnumMap.put(EnumTest.GREEN , "绿灯");
currEnumMap.put(EnumTest.YELLOW , "黄灯");
// 2. 遍历对象
for (EnumTest aEnumTest : EnumTest.values ()) {
System. out .println( "[key=" + aEnumTest.name() + ",value="+ currEnumMap.get(aEnumTest) + "]" );
}
}
/**
*   演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容 <BR/>
*   可以使用 allOf 方法
*/
private static void testEnumSet() {
EnumSet<EnumTest> currEnumSet = EnumSet.allOf (EnumTest.class );
for (EnumTest aEnumTestSetElement : currEnumSet) {
System. out .println( " 当前 EnumSet 中数据为: " + aEnumTestSetElement);
}
}
/**
* switch与enum的结合使用
*/
private static void testsWitch() {
EnumTest switchState = EnumTest.RED;
switch (switchState) {
case RED:
System.out.println("RED");
break;
case GREEN:
System.out.println("GREEN");
break;
default:
System.out.println("YELLOW");
break;
}
}
public static void main(String[] args) {
testTraversalEnum();
testEnumMap();
testEnumSet();
testsWitch();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: