Java 枚举
/*
* 枚举是JDK 1.5 引入 在java.lang中
* 常用的方法 有int CompareTo(E e) 比较此枚举与指定对象的顺序
* Class<E> getDeclaringClass() 返回与此枚举类型对应的Class 对象
* String name() 返回枚举对象的名称 在枚举申明中对其进行申明
* int ordinal() 返回枚举常量的序数
* String toString()
* Static <T extends Enum<T>> T valueOf(Class<T> enumType,String name) 返回带指定名称的指定枚举类型的枚举常量
可以把 enum 看成是一个普通的 class,它们都可以定义一些属性和方法,不同之处是:enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单一继承)。
*/
1 package com.test.Enum;
2
3 public class EnumDemo {
4
5 public enum ColorEnum {
6 // 普通枚举
7 red, green, black, pink;
8 }
9
10 public enum SeasonEnum {
11 // 枚举需要写在最前面 否则编译出错 枚举可以像普通类一样 带有属性和方法
12 spring, summer, autumn, winter;
13 private static final String position = "test";
14
15 public static SeasonEnum getSeason() {
16 if ("test".equals(position)) {
17 return spring;
18 } else {
19 return winter;
20 }
21 }
22 }
23
24 public enum Gender {
25 // 通过括号赋值,并且必须带有一个参数构造方法和一个属性 另外一个方法 否则编译出错
26 MAN("MAN"), WOMAN("WOMAN");
27
28 private final String Value;
29
30 private Gender(String Value) {
31 this.Value = Value;
32 }
33
34 public String getValue() {
35 return Value;
36 }
37 }
38
39 public enum OrderState {
40 // 带抽象方法的枚举
41 CANCEL {
42 public String getName() {
43 return "已取消";
44 }
45 },
46 WAITING {
47 public String getName() {
48 return "待审核";
49 }
50 },
51 WAITPAMENT {
52 public String getName() {
53 return "待支付";
54 }
55 },
56 ADMEASUREPRODUCT {
57 public String getName() {
58 return "正在配送";
59 }
60 },
61 WAITDELIVER {
62 public String getName() {
63 return "等待发货";
64 }
65 },
66 DELIVERED {
67 public String getName() {
68 return "已发货";
69 }
70 },
71 RECEIVED {
72 public String getName() {
73 return "已收货";
74 }
75 };
76 public abstract String getName();
77 }
78
79 public static void main(String[] args) {
80 // 枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值;
81 ColorEnum colorEnum = ColorEnum.black;
82 switch (colorEnum) {
83 case red:
84 System.out.println("color is red");
85 break;
86 case green:
87 System.out.println("color is green");
88 break;
89 case black:
90 System.out.println("color is black");
91 break;
92 case pink:
93 System.out.println("color is pink");
94 break;
95 default:
96 break;
97 }
98 // 遍历枚举
99 System.out.println("遍历ColorEnum中的值:");
100 for (ColorEnum colorEnum2 : ColorEnum.values()) {
101 System.out.println(colorEnum2);
102 }
103
104 // 获取枚举的个数
105 int mount = ColorEnum.values().length;
106 if (mount > 0) {
107 System.out.println("枚举有" + mount + "个");
108 }
109
110 // 获取每个枚举值 所在位置的索引
111 System.out.println("红色所在位置索引:" + ColorEnum.red.ordinal());
112 System.out.println("黑色所在位置的索引:" + ColorEnum.black.ordinal());
113 System.out.println("粉色所在位置的索引:" + ColorEnum.pink.ordinal());
114 System.out.println("绿色所在位置的索引:" + ColorEnum.green.ordinal());
115
116 System.out.println("枚举默认实现了Comparable接口:");
117 System.out.println(ColorEnum.red.compareTo(ColorEnum.green));
118
119 System.out.println("季节为:" + SeasonEnum.getSeason());
120
121 System.out.println("==============");
122 for (Gender gender : Gender.values()) {
123 System.out.println(gender.Value);
124 }
125
126 System.out.println("=========");
127 for (OrderState orderState : OrderState.values()) {
128 System.out.println(orderState.getName());
129 }
130 }
131
132 }