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         @Override

14         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         //控制台输出20

6     }

7 

8 }

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

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

 

你可能感兴趣的:(java)