Java

Java中,枚举的其中用法:

1、定义常量:

 1 /**
 2  * 枚举第一种用法:常量;替代之前的定义在类中的常量
 3  */
 4 package enum_;
 5 
 6 public enum Color1
 7 {
 8     RED,
 9     YELLOW,
10     BLUE,
11     GREEN  // 最后一个加逗号,加分号,不加,都没报错
12 }
13 
14 class EnumDemo01
15 {
16     public static void main(String[] args)
17     {
18         Color1 color = Color1.RED;
19         Color1 color2 = Color1.RED;
20         Color1 color3 = Color1.YELLOW;
21         
22         // 结果返回false
23         System.out.println("RED".equals(color));
24         // 结果返回true
25         System.out.println("RED".equals(color.toString()));
26         
27         // 结果返回false
28         System.out.println("RED".equals(Color1.RED));
29         // 结果返回true
30         System.out.println("RED".equals(Color1.RED.toString()));
31         
32         // enum类型转为String类型的两种方式
33         // 1.调用toString()方法,返回此枚举常量的名称;
34         String red = color.toString();
35         System.out.println("RED".equals(red));  // 结果返回true
36         // 2.调用name()方法,返回此枚举常量的名称;
37         String name = color.name();
38         System.out.println("RED".equals(name));  // 结果返回true
39         
40         // 使用 == 或 equals() 比较两个枚举类是否相等,效果是一样的
41         // 1.使用 == 进行比较
42         System.out.println(color.equals(color2));
43         System.out.println(color == color2);
44         // 2.使用 equals() 进行比较
45         System.out.println(color.equals(color3));
46         System.out.println(color == color3);
47     }
48 }
枚举第一种用法:常量;替代之前的定义在类中的常量

2、在 switch 中使用:

 1 /**
 2  * 枚举的第二种用法:放在switch中
 3  */
 4 package enum_;
 5 
 6 public enum Color2
 7 {
 8     RED, GREEN, YELLOW, BLUE
 9 }
10 
11 class EnumDemo02
12 {
13     public static void main(String[] args)
14     {
15         Color2 signal = Color2.BLUE;
16         
17         switch(signal)
18         {
19             case RED:
20                 System.out.println("红灯亮...");
21                 break;
22             case GREEN:
23                 System.out.println("绿灯亮...");
24                 break;
25             case YELLOW:
26                 System.out.println("黄灯亮...");
27                 break;
28             default:
29                 System.out.println("灯坏了,不亮了...");
30         }
31     }
32 }
枚举的第二种用法:放在switch中

3、添加属性和方法:

 1 /**
 2  * 枚举的第三种用法:向枚举中添加属性和方法
 3  */
 4 package enum_;
 5 
 6 public enum Color3
 7 {
 8     // 如果自定义自己的方法,那么必须在enum实例序列的最后添加一个分号;而且 Java 要求必须先定义 enum 实例;
 9     // 下面实例是依据构造方法来实现这个写法
10     RED("红色",1), YELLOW("黄色",2), BLUE("蓝色",3), GREEN("绿色",4);
11     
12     // 成员变量  
13     private String name;
14     private Integer index;
15     
16     // 构造方法
17     // 构造方法的访问限定符只能是private或默认不写
18     private Color3(String name, Integer index)
19     {
20         this.name = name;
21         this.index = index;
22     }
23     
24     // 普通方法  
25     public String getColorName(Integer index)
26     {
27         for(Color3 c : Color3.values())
28         {
29             if(c.getIndex() == index)
30                 return c.getName();
31         }
32         
33         return null;
34     }
35 
36     // get、set 方法 
37     public String getName()
38     {
39         return name;
40     }
41     public void setName(String name)
42     {
43         this.name = name;
44     }
45     public Integer getIndex()
46     {
47         return index;
48     }
49     public void setIndex(Integer index)
50     {
51         this.index = index;
52     }
53     
54 }
55 
56 class EnumDemo03
57 {
58     public static void main(String[] args)
59     {
60         Color3 c = Color3.RED;
61         System.out.println(c.getName());
62         System.out.println(c.getIndex());
63         System.out.println(c.getColorName(2));
64     }
65 }
枚举的第三种用法:向枚举中添加属性和方法

4、覆盖枚举的方法:

 1 /**
 2  * 枚举第四种用法:覆盖枚举的方法
 3  */
 4 package enum_;
 5 
 6 public enum Color4
 7 {
 8     RED("红色",1), YELLOW("黄色",2), BLUE("蓝色",3), GREEN("绿色",4);
 9     
10     private String name;
11     private Integer index;
12     
13     private Color4(String name, Integer index)
14     {
15         this.name = name;
16         this.index = index;
17     }
18 
19     public String getName()
20     {
21         return name;
22     }
23     public void setName(String name)
24     {
25         this.name = name;
26     }
27     public Integer getIndex()
28     {
29         return index;
30     }
31     public void setIndex(Integer index)
32     {
33         this.index = index;
34     }
35     
36     // 重写toString()方法
37     @Override
38     public String toString()
39     {
40         return "name:" + name + ",index:" + index;
41     }
42     
43 }
44 
45 class EnumDemo04
46 {
47     public static void main(String[] args)
48     {
49         Color4 c = Color4.RED;
50         System.out.println(c.getName());
51         System.out.println(c.getIndex());
52         System.out.println(c.toString());
53     }
54 }
枚举第四种用法:覆盖枚举的方法

5、实现接口:

 1 /**
 2  * 枚举第五种用法:实现接口
 3  */
 4 package enum_;
 5 
 6 public enum Color5 implements Behaviour
 7 {
 8     RED("红色",1), YELLOW("黄色",2), BLUE("蓝色",3), GREEN("绿色",4);
 9     
10     private String name;
11     private Integer index;
12     
13     private Color5(String name, Integer index)
14     {
15         this.name = name;
16         this.index = index;
17     }
18 
19     @Override
20     public void printColorInfo()
21     {
22         System.out.println("name:" + name + ",index:" + index);
23     }
24 
25     public String getName()
26     {
27         return name;
28     }
29     public void setName(String name)
30     {
31         this.name = name;
32     }
33     public Integer getIndex()
34     {
35         return index;
36     }
37     public void setIndex(Integer index)
38     {
39         this.index = index;
40     }
41     
42     @Override
43     public String toString()
44     {
45         return "name:" + name + ",index:" + index;
46     }
47 
48 }
49 
50 interface Behaviour
51 {
52     void printColorInfo();
53 }
54 
55 class EnumDemo05
56 {
57     public static void main(String[] args)
58     {
59         Color5 c = Color5.RED;
60         System.out.println(c.toString());
61         c.printColorInfo();
62     }
63 }
枚举第五种用法:实现接口

6、使用接口组织枚举:

 1 /**
 2  * 枚举第六种用法:使用接口组织枚举
 3  */
 4 package enum_;
 5 
 6 // 还必须导包
 7 import enum_.Color6.Color6_1;
 8 import enum_.Color6.Color6_2;
 9 
10 public interface Color6
11 {
12     enum Color6_1
13     {
14         RED, YELLOW
15     }
16     
17     enum Color6_2
18     {
19         BLUE, GREEN
20     }
21 }
22 
23 class EnumDeno06
24 {
25     public static void main(String[] args)
26     {
27         Color6_1 c1 = Color6.Color6_1.RED;
28         Color6_2 c2 = Color6.Color6_2.BLUE;
29         
30         System.out.println(c1.name());
31         System.out.println(c2.name());
32     }
33 }
枚举第六种用法:使用接口组织枚举

7、枚举集合的使用:
 java.util.EnumSet和java.util.EnumMap是两个枚举集合;EnumSet保证集合中的元素不重复;
EnumMap中的key是enum类型,而value则可以是任意类型;关于这个两个集合的使用就不在这里赘述,可以参考JDK文档;

原文地址:https://www.cnblogs.com/kehuaihan/p/8455859.html