课时111:定义枚举类
01.枚举的基本定义
1.1枚举的主要作用
(1)很多的编程语言都会提供有枚举的概念,但是 Java 一直到了JDK 1.5之后才提出了所谓枚举的概念。在实际的开发之中枚举的主要作用是用于定义有限个数对象的一种结构(多例设计),枚举就属于多例设计,并且其结构要比多力设计更加的简单。
(2)从JDK 1.5之后,在程序之中提供有 Enum 的关键字,利用此关键字可以实现枚举的定义。
1.2范例:定义一个枚举
(1) 举枚设计
enum Color { // 枚举类 RED,GREEN,BLUE ; // 实例化对象 } public class JavaDemo { public static void main(string args[ ]) { Color c = Color.RED ; // 获取实例化对象 System.out.println(c); } }
(2)多例设计
enum Color { // 枚举类 红色,绿色,蓝色; // 实例化对象 } public class JavaDemo { public static void main(string args[]) { Color c = color.红色 ; // 获取实例化对象 System.out.println(c) ; } }
(2) 对比
如果此时采用了多例设计模式来进行设计,那么需要编写很多的程序代码,这样对于开发的复杂度是比较高的,因为里面牵扯到了构造方法的私有化以及静态方法。
以多例设计来举例没有一个缺点,要想获得实例化对象必须用 System 方法,假如上传的参数不正确就无法在程序编译的过程中知道哪里出错了。
System 代码:
private Color(string title) { //构造方法私有化 this.title= title ; } Public statiC Color getinstance(string Color) { switch(color){ Case "red”:return RED; Case "green”:return GREEN; Case "blue”:return BLUE; default:return null ; } } public string tostring() return this.title ; } } public class JavaDemo { public static void main(String argsl] { Color C = Color.getInstance(“pink”); System.out.println(c); } }
没有值,这个程序就会返回空,在程序编译的时候发现“Pink”会更好
枚举代码:
Enum Color { // 枚举类 RED ,GREEN ,BLUE ; // 实例化对象 } Public class JavaDemo { public static void main (String args [] ) { Color c=Color .PINK ; System.out.println(c) ; } }
假如写错“Pink”,会出现错误:找不到符号
通过这样的特点,发现多例设计与枚举设计虽然可以实现相同的功能,但是使用枚举可以在程序编译的时候判断所使用实例化对象是否存在。
而多例和泛型判断不出来,只有在编译的时候才能检查出,程序在哪一方面有错误,它会把这个错误的举措,由程序运行的部分变成程序编译的部分,这就是新特性的提出,所以本质上枚举跟多例是相似的,但是枚举要比多例设计更加靠前一些。
02.Values ()方法获取所有的枚举对象
2.1获取所有的枚举对象
在进行枚举处理的时候,还可以利用 Values () 方法获取所有的枚举对象进行输出。
(1)范例:获取所有的枚举对象
Enum Color { // 枚举类 RED ,GREEN ,BLUE ; // 实例化对象 } Public class JavaDemo { public static void main (String args [] ) { For ( Color c: Color.values() ) { System.out.println(c) ; } } }
2.2对象数组
如果此时同样的功能需要通过多例设计来解决,就需要使用对象数组。从 JDK 1.5 追加了枚举结构之后,就可以在 Switch 之中进行枚举项的判断。
(1)范例:观察枚举与 Switch
Enum Color { // 枚举类 RED ,GREEN ,BLUE;// 实例化对象 } public class JavaDemo { public static void main (string args [] ) { Color c = Color.RED ; switch(c) { // 直接支持枚举 case RED : System.out.println("红色") ; Break; Case GREEN : System.out.println("绿色") ; Break ; case BLUE : System.out.println("蓝色") ; break ; } }
(2) 总结
多例上是无法实现这种与 Switch 直接连接的,多例要想实现它就需要编写大量的 If 判断。但是综合来讲枚举虽然功能本质上跟多例是一致的,但是会感觉它的设计会比多例结构更好,对枚举应该有冷静的认识,如果你已经习惯用枚举开发,可以继续使用。
如果你不习惯用枚举,可以选择不去使用,没有明确的要求,因为 Java 前十年是没有枚举的,不过由于 JDK 1.5 出现的比较早,现在很多的程序位上已经大量采用了枚举这一概念。