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文档;