首页 > 代码库 > Java枚举再学习

Java枚举再学习

枚举是JDK 5以后引入的,被称作新特性,虽然JDK 5推出已经N年了,不过鉴于这个版本在Java里程碑上的重要性,就姑且继续称作新特性吧。

枚举的定义:

1 public enum Lamp {2     RED,GREEN,YELLOW;3 }

枚举使用关键字enum定义,enum是enumeration的缩写。枚举的基本作用是将所需要的可选项罗列出来,以控制程序只能获得被罗列出的选项,可以当做是一种规范。而枚举元素通常采用全大写,因为枚举元素属于固定项,和常量类似。

枚举的每一个元素都代表这个枚举类本身。承上例:

 

1 public class EnumTest {2 3     public static void main(String[] args) {4         Lamp lamp = Lamp.GREEN;5     }6 7 }

 

使用"枚举类名.元素名"返回的永远是枚举类对象。我们可以利用这一特性进行这种设计,当前台传回一个字符串时,我们可以调用枚举类的valueOf()方法把它转换为一个枚举类对象,进而进行各种操作,这样就省去了我们大量的时间去制定将字符串转换为对象的规则。

枚举类同样可以具有抽象方法和普通方法:

 1 public enum Lamp { 2     RED { 3         @Override 4         public Lamp nextLamp() { 5             return GREEN; 6         } 7     },GREEN { 8         @Override 9         public Lamp nextLamp() {10             return YELLOW;11         }12     },YELLOW {13         @Override14         public Lamp nextLamp() {15             return RED;16         }17     };18     19     public abstract Lamp nextLamp(); 20     21     public void say() {22         System.out.println("Hello Enum");23     }24 }

前文提到,枚举的每一个元素都代表一个枚举类对象,所以当定义了抽象方法后,每个枚举元素都应该去实现这个抽象方法。换句话说就是,每个枚举元素都相当于是继承自枚举类的一个子类,所以父类的抽象方法必须实现。另外,枚举类同样也可以有普通方法。

除了抽象和普通方法外,枚举类也可以具有构造方法:

 1 public enum Lamp { 2      3     RED(20),GREEN,YELLOW; 4      5     private Lamp() { 6          7     } 8      9     private Lamp(int i ) {10         System.out.println(i);11     }12     13 }

在枚举元素名后的括号内传入构造器所需参数,就可以调用对应构造器了,如:

1 public class EnumTest {2 3     public static void main(String[] args) {4         Lamp lamp = Lamp.RED;5         //控制台输出206     }7 8 }

最后要说明的是,枚举类里没有公共的构造方法,枚举是天生的单例,当你不提供构造方法时,枚举类默认提供的构造方法就是私有的,所以使用枚举类构造单例会比使用懒汉模式、饿汉模式来构造单例更简单。

当然,枚举的实际用处还是要在实际项目中才能得以体现,这次巩固复习的重点也就是这些了。

 

Java枚举再学习