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

JDK5.0新特性(3)-枚举(Type safe enums)

2011-06-28 21:27 471 查看
定义Enum本质上是在定义一个类别,当你使用enum来定义枚举类型时,

实际上您定义出来的类型继承自java.lang.Enum这个抽象类,而每个枚举的成员就是你定义的枚举类型
的一个实例(编译的时候就确定有几个实例了 Instance),它们都是final static public 类型的。还是直接上例子吧,使用方法都有注释。

?[Copy to clipboard]Download EnumTest.java

/**
* EnumTest.java
* enumtest
*
* Function: TODO
*
*   ver     date           author
* ──────────────────────────────────
*           2011-6-26      Leon
*
* Copyright (c) 2011, TNT All Rights Reserved.
*/

package enumtest;

import java.util.ArrayList;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;

/**
* ClassName:EnumTest
* Function: 演示Enum理解Enum的本质
* Reason:   定义Enum本质上是在定义一个类别,当你使用enum来定义枚举类型时,
* 实际上您定义出来的类型继承自java.lang.Enum这个抽象类,而每个枚举的成员就是你定义的枚举类型
* 的一个实例(编译的时候就确定有几个实例了 Instance),它们都是final static public 类型的。
*
* @author   Leon
* @version
* @since    Ver 1.1
* @Date     2011-6-26
*/
public class EnumTest {
public static void main(String... args){
//枚举的引用
Color myColor = Color.WHITE;
//枚举还提供了两个有用的静态方法values()[得到枚举值的数组]和valueOf(),ordinal函数表示顺序(很少用)
for(Color color : Color.values()){
System.out.printf("NO.=%d, Color=%s ,%n",color.ordinal() , color );
//和枚举的位置进行比较自己就是0 在前就是负数 在后就是正数
System.out.println("compare to "+myColor.compareTo(color));
}

//通过字符串转换为对应的枚举值   在代替switch的语句很有用,因为其它人传来的一一般就是字符串
myColor=Color.valueOf("BULE");
//Switch中还可以传入Enum类型, 现在switch中可以传入5种类型  int char  byte short和enum

switch(myColor){
case WHITE:
System.out.println("white");
case RED:
System.out.println("red");
case BULE:
System.out.println("transfer success!");
}
System.out.println("---------------------------Test of -------------------");
EnumSet
<color> enumSet= EnumSet.of(Color.WHITE,Color.WHITE , Color.RED);
System.out.println("Show all EnumSet:");
showEnumSet(enumSet);
//使用complementOf 是除了刚才定义的集合 剩下的集合(减法)
System.out.println("---------------------------Test Complement of -------------------");
showEnumSet(EnumSet.complementOf(enumSet));
//使用EnumSet.noneOf方法   Color.class 指明只能接收Color类型的
System.out.println("---------------------------Test None of -------------------");
enumSet=EnumSet.noneOf(Color.class);
showEnumSet(enumSet);
//使用copyOf方法 (注意:EnumSet都是包含有of这个关键字)将集合里面的元素copy到Enum集合中从而
//完成初始化
System.out.println("---------------------------Test Copyof-------------------");
List
<color> list  =  new ArrayList
<color>();
list.add(Color.BULE);
list.add(Color.RED);
EnumSet  test=EnumSet.copyOf(list);
showEnumSet(test);
System.out.println("----------------------------------Test EnumMap ----------------------------------");
//      EnumMap
EnumMap
<color,string> enumMap  = new EnumMap
<color,string>(Color.class);
enumMap.put(Color.BULE, "Bule");
enumMap.put(Color.RED, "Red");
enumMap.put(Color.WHITE, "White");

for(Color color : Color.values()){
System.out.println(enumMap.get(color));//返回有一个为空 原因是Yellow没有赋值
}

}
//使用EnumSet
public static void  showEnumSet(EnumSet
<color> enumSet){

for(Iterator
<color> iterator =enumSet.iterator();iterator.hasNext(); ){
System.out.print(iterator.next()+ ",");
}
System.out.println();
}
}
enum Color{
WHITE("zui") ,
RED("niu"),
BULE("wang"),
YELLOW;

private String  value ;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
//构造方法
Color(String value){

}
Color(){

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息