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
实际上您定义出来的类型继承自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(){ } }
相关文章推荐
- JDK5.0新特性--枚举
- 黑马程序员_学习笔记:11) Jdk5.0新特性:增强for循环、可变参数(...)、静态导入、枚举:关键字 enum、自动拆装箱、泛型
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记
- 枚举 JDK5.0的新特性之一
- Day 07 debug调试 junit单元测试 jdk5.0新特性 泛型,枚举,静态导入,拆装箱,增强for,可变参数 反射
- JDK5.0新特性-枚举
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记
- 黑马程序员--基础--第一篇--JDK5.0新特性泛型 静态倒入 自动拆装箱 不定项参数 增强for如循环 枚举
- JDKjdk1.4、jdk5.0、JDK6.0、 JDK7.0 新特性
- Myeclipse的使用和JDK 5.0的新特性
- 谈谈JDK1.5新特性之枚举数据类型
- 基础加强学习总结之部分jdk5.0新特性
- (笔记十)eclipse介绍、JUnit、5.0特性、枚举
- 20、java jdk 5.0新特性(静态导入&自动装箱和拆箱&增强for循环 &可变参数)
- Jdk5.0新特性之Generic Types (泛型)
- JDK5.0 特性 监控与管理虚拟机
- JDK 5.0新特性之自动装箱自动拆箱
- 黑马程序员——JAVA学习笔记——Jdk5.0新特性
- JDK5.0新特性---泛型
- JDKjdk1.4、jdk5.0、JDK6.0、 JDK7.0、JDK8.0、JDK9.0(2016年发布) 新特性