有关 enum的重新理解

 有关enum 的再次理解:

    所有的枚举都继承自java.lang.Enum类。

    说到底enum也只是一个java类,只不过他有几个特殊的点。

    1、enum中的各个实例,就是enum的static实例化对象,而他自身将构造函数隐藏,所以我们只能使用代码中写到的实例而不能自己去new一个enum的实例。

    2、enum只是个java类,所以自定义函数方法和属性、多态、 重载、实现接口都是被允许的。

         3、enum 内部自带name和ordinal,name就是实例的名字,ordinal就是对实例进行的一个排序的序号。所以我们可以使用 “==”或者“equals” 来判断enum是否相等。

    4、enum实现了 Comparable 接口,所以我们也可以使用compare,对enum大小进行判断,默认使用的是 ordinal属性。

    5、现在的switch可以使用enum作为判断依据。

    6、在接口内部实现接口 对实例进行分类

         7、java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。

 1 package EnumT;
 2 
 3 import java.util.EnumSet;
 4 
 5 public enum ColorEnum {
 6 
 7     /**
 8      *
 9      * //1、 重写构造方法,使用多个构造方法重载 并使用
10      */
11     RED,GREEN,BLUE("BULE");
12 
13     private String value = "color";
14     private ColorEnum() {
15     }
16 
17     private ColorEnum(String value){
18             this.value = value;
19     }
20 
21     public String getValue() {
22         return value;
23     }
24 
25     public void setValue(String value) {
26         this.value = value;
27     }
28 
29     /**
30      *  重写  方法
31      * @return
32      */
33     @Override
34     public String toString() {
35         return "ColorEnum{" +
36                 "value='" + value + '\'' +
37                 '}';
38     }
39 
40     static  public  void main (String... args){
41 
42         /**
43          *    2、name  ordinal
44          */
45         //获取 name
46         String name = ColorEnum.RED.name();
47         //获取 ordinal
48         int ordinal = ColorEnum.RED.ordinal();
49         System.out.println("name: "+name+"\t ordinal: "+ordinal);
50 
51         /**
52          *  3、equals  ==
53          */
54         boolean equal ;
55         // == 判断 是否相等
56         equal =  ( ColorEnum.RED==ColorEnum.RED);
57         System.out.println("== : "+equal);
58         // equals 判断相等
59         equal = (ColorEnum.RED.equals(ColorEnum.RED));
60         System.out.println("equals : "+equal);
61 
62         /**
63          *  4、compare
64          *  0、正、负 表示先后顺序
65          */
66          int   e = (ColorEnum.RED.compareTo(ColorEnum.BLUE));
67          System.out.println("compare :"+e);
68         /**
69          *  5、switch
70          */
71         ColorEnum colorEnum = ColorEnum.RED;
72         switch (colorEnum){
73             case RED:break;
74             case BLUE:break;
75             case GREEN:break;
76 
77         }
78         /**
79          *   6、EnumSet
80          */
81         EnumSet<ColorEnum> colorEnumsSet = EnumSet.allOf(ColorEnum.class);
82         for (ColorEnum colorEnum1 :colorEnumsSet){
83             System.out.println("EnumSet :"+colorEnum1.name());
84         }
85 
86     }
87 
88 
89 }

运行结果:

ame: RED     ordinal: 0
== : true
equals : true
compare :-2
EnumSet :RED
EnumSet :GREEN
EnumSet :BLUE

Process finished with exit code 0

 

posted @ 2017-09-04 11:11  千彧  阅读(175)  评论(0编辑  收藏  举报