Java枚举类型

枚举类型( enumeration type )有时也被称作被枚举的类型( enumerated type ),或者更简单地称作枚举( enum ),这种类型在定义时,所有可能的取值都是已知的。用枚举类型代替声明一个具名整型常量public final static int NUM原因是:枚举是完全类型安全的,除了Enum枚举常量和null值外,我们无法对类型为Enum的引用赋予其他任何值,而具名整型常量则每次操作都需要来一次费时的 if 语句判断是否引用合法;其次,枚举还提供了比具名整型常量多得多的复杂用法。

一个简单的枚举例子

package enumDemo;

enum Color {
	RED, GREEN, BLUE;
}

public class EnumDemo {
	public static void main(String[] args) {
		Color c = Color.BLUE;
		switch(c){
		case RED : System.out.println("color.red");
		case GREEN : System.out.println("color.green");
		case BLUE : System.out.println("color.blue");
		}
	}
}

枚举类型的常用函数

package enumDemo;

enum Color {
	RED, GREEN, BLUE;
}

public class EnumDemo {
	public static void main(String[] args) {
		Color[] array = Color.values(); //public static E[] values()
		//返回一个包含了所有枚举常量的数组,这些枚举常量按声明顺序排序
		for(Color e : array){
			System.out.println(e);
		}
		//public static E valueOf(String name)返回指定名称的枚举常量
		System.out.println(Color.valueOf("RED"));
		//public final int ordinal()返回枚举常量的数序值
		Color green = Color.GREEN;
		System.out.println(green.ordinal());
	}
}

枚举的复杂用法(待扩展)

package enumDemo;

enum Color {
	RED{
		String getMessage(){
			return "color:red";
		}
	}, 
	GREEN{
		String getMessage(){
			return "color:green";
		}
	}, 
	BLUE{
		String getMessage(){
			return "color:blue";
		}
	};
	abstract String getMessage();
	public String toString(){
		return this.getMessage();
	}
}

public class EnumDemo {
	public static void main(String[] args) {
		Color test = Color.GREEN;
		System.out.println(test);
	}
}

EnumSet和EnumMap这两个集合是特别设计的,用来高效地处理enum常量。

EnumSet的用法:

package moveup;

import java.util.Arrays;  
import java.util.EnumSet;  
import java.util.Set;  
  
public class EnumSetTest {  
  
    public static void main(String[] args) {  
        // 创建一个指定类型的空的集合  
        EnumSet<MyEnum> set1 = EnumSet.noneOf(MyEnum.class);  
        set1.add(MyEnum.RED);  
        set1.add(MyEnum.GREEN);  
        set1.add(MyEnum.BLUR);  
        showSet(set1);  
        // 创建指定类型的所有数据的集合  
        EnumSet<MyEnum> set2 = EnumSet.allOf(MyEnum.class);  
        showSet(set2);  
        // 创建指定类型指定初始数据的集合  
        EnumSet<MyEnum> set3 = EnumSet.of(MyEnum.GREEN, MyEnum.RED,  
                MyEnum.WHITE);  
        showSet(set3);  
        // 创建指定类型,指定范围的集合  
        // 包含边界数据  
        EnumSet<MyEnum> set4 = EnumSet.range(MyEnum.RED, MyEnum.YELLOW);  
        showSet(set4);  
        // 集合的用法和普通的没有区别  
    }  
  
    /** 
     *显示Set里面的数据。 
     *  
     *@paramset 
     */  
    private static void showSet(Set set) {  
        System.out.println(Arrays.toString(set.toArray()));  
    }  
}  
  
enum MyEnum {  
    BLACK, WHITE, RED, BLUR, GREEN, YELLOW  
}

EnumMap的用法:

package moveup;

import java.util.EnumMap;

public class EnumMapTest {
	public enum Time {
		ONE, TWO, THREE, FOUR, FIVE, SIX;
	}

	public static void main(String[] args) {
		//创建一个空的EnumMap,使其持有具有给定枚举类型的键
		EnumMap<Time, String> demo1 = new EnumMap<Time, String>(Time.class);
		demo1.put(Time.ONE, "1个月内");
		demo1.put(Time.TWO, "1—3个月");
		demo1.put(Time.THREE, "4—6个月");
		demo1.put(Time.FOUR, "7—12个月");
		demo1.put(Time.FIVE, "1年后");
		demo1.put(Time.SIX, "不确定");
		System.out.println(demo1.get(Time.ONE));
		//创建一个EnumMap,其枚举类型与参数map相同,并包含map的所有元素
		EnumMap<Time, String> demo2 = new EnumMap(demo1);
		System.out.println(demo2.get(Time.TWO));
	}
}


你可能感兴趣的:(Java枚举类型)