首页 > 代码库 > java 28 - 5 JDK5的新特性 之 枚举的使用

java 28 - 5 JDK5的新特性 之 枚举的使用

上一章,自定义了枚举类,超级麻烦。。

所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>>

  

注意事项

  •   定义枚举类要用关键字enum
  •   所有枚举类都是Enum的子类
  •   枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
  •   枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
  •   枚举类也可以有抽象方法,但是枚举项必须重写该方法
  •   枚举在switch语句中的使用

enum的方法:

除了下面的方法,还有一个方法在API中找不到的:

  values();  : 每个枚举类都具有这个方法,遍历枚举类的所有美剧值。

 

1         // values()
2         // 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
3         Direction2[] dirs = Direction2.values();
4         for (Direction2 d2 : dirs) {
5             System.out.println(d2);
6             System.out.println(d2.getName());
7         }

 

 

 

 

方法摘要
protected  Object clone()
          抛出 CloneNotSupportedException。
 int compareTo(E o)
          比较此枚举与指定对象的顺序。
 boolean equals(Object other)
          当指定对象等于此枚举常量时,返回 true。
protected  void finalize()
          枚举类不能有 finalize 方法。
 Class<E> getDeclaringClass()
          返回与此枚举常量的枚举类型相对应的 Class 对象。
 int hashCode()
          返回枚举常量的哈希码。
 String name()
          返回此枚举常量的名称,在其枚举声明中对其进行声明。
 int ordinal()
          返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
 String toString()
          返回枚举常量的名称,它包含在声明中。
static
<T extends Enum<T>>
T
valueOf(Class<T> enumType, String name)
          返回带指定名称的指定枚举类型的枚举常量。

 

第一版:

public enum Direction01 {
    FRONT, BENIND, LEFT, RIGHT;
}

 

第二版:

 1 public enum Direction02 {
 2 
 3     FRONT("前"), BENIND("后"), LEFT("左"), RIGHT("右");
 4 
 5     private String name;
 6 
 7     private Direction02(String name) {
 8         this.name = name;
 9     }
10 
11     public String getname() {
12         return name;
13     }
14 }

 

第三版:

 1 public enum Direction03 {
 2     FRONT("前") {
 3         @Override
 4         public void show() {
 5             System.out.println("前");
 6 
 7         }
 8     },
 9     BEHIND("后") {
10         @Override
11         public void show() {
12             System.out.println("后");
13 
14         }
15     },
16     LEFT("左") {
17         @Override
18         public void show() {
19             System.out.println("左");
20 
21         }
22     },
23     RIGHT("右") {
24         @Override
25         public void show() {
26             System.out.println("右");
27 
28         }
29     }, ;
30     private String name;
31 
32     private Direction03(String name) {
33         this.name = name;
34     }
35 
36     public String getname(String name) {
37         return name;
38     }
39 
40     public abstract void show();
41 }

 

测试类:

 1 public class DirectionDemo {
 2 
 3     public static void main(String[] args) {
 4 
 5         // 打印第一版本
 6         Direction01 d1 = Direction01.FRONT;
 7         System.out.println(d1); // FRONT
 8 
 9         // 打印第二版本
10         Direction02 d2 = Direction02.FRONT;
11         System.out.println(d2); // FRONT
12         System.out.println(d2.getname()); //13 
14         // 打印第三版本 (枚举在switch语句中的使用)
15         Direction03 d3 = Direction03.FRONT;
16 
17         switch (d3) {
18         case FRONT:
19             System.out.println("选择了前");
20             break;
21 
22         case BEHIND:
23             System.out.println("选择了后");
24             break;
25 
26         case LEFT:
27             System.out.println("选择了左");
28             break;
29 
30         case RIGHT:
31             System.out.println("选择了右");
32             break;
33 
34         default:
35             break;
36         }
37 
38     }
39 
40 }

 

java 28 - 5 JDK5的新特性 之 枚举的使用