1 import java.util.Calendar;
2
3 /**
4 * 演示如何使用 Enum
5 */
6 public class EnumValue {
7
8 public static void main(String[] args) {
9
10 // 演示如何使用 Weekday
11 Weekday w = Weekday.Monday;
12 System.out.println("w = " + w.toString());
13 System.out.println("Monday compares to Friday = "
14 + Weekday.Monday.compareTo(Weekday.Friday));
15
16 System.out.println("Enum value of \"Sunday\" is " + Weekday.valueOf("Sunday"));
17
18 try {
19 System.out.println("Enum value of \"AnotherDay\" is "
20 + Weekday.valueOf("AnotherDay")); // 这里将会抛出 IllegalArgumentException
21 } catch (IllegalArgumentException e) {
22 System.out.println("exception: " + e.getMessage());
23 }
24 System.out.println();
25
26 // --------------------------------
27 // 演示如何使用 Month
28 System.out.println("The first month is " + Month.Jan);
29 System.out.println("The full name of the first month is " + Month.Jan.getFullName());
30 System.out.println("The fifth month is " + Month.valueByIndex(5).getFullName());
31 System.out.println("Index of August is " + Month.valueByFullName("August").getIndex());
32 System.out.println("Now is " + Month.thisMonth().getFullName());
33 }
34 }
35
36 /**
37 * 一个表示星期几的 enum (这是一个简单的例子)
38 */
39 enum Weekday {
40 Monday, Tuesday, Wednesday, Thirsday, Friday, Saturday, Sunday
41 }
42
43 /**
44 * 一个表示月份的 enum (这是一个稍微复杂的例子)
45 */
46 enum Month {
47
48 // 十二个月份
49 Jan("January"), Feb("Febrary"), Mar("March"),
50 Apr("April"), May("May"), June("June"),
51 July("July"), Aug("August"), Sept("September"),
52 Oct("October"), Nov("November"), Dec("December");
53
54 // 全名
55 private String fullName;
56
57 // 构造方法
58 Month(String fullName) {
59 this.fullName = fullName;
60 }
61
62 public String getFullName() {
63 return fullName;
64 }
65
66 // 获取当前 Enum 值是第几个月份。一月份则返回 1。
67 public int getIndex() {
68 return ordinal() + 1;
69 }
70
71 // 根据月数获得 enum 对象
72 public static Month valueByIndex(int index) {
73 for (Month month : Month.values()) {
74 if (month.getIndex() == index) {
75 return month;
76 }
77 }
78 return null;
79 }
80
81 // 根据全名获得 enum 对象
82 public static Month valueByFullName(String fullName) {
83 for (Month month : Month.values()) {
84 if (month.getFullName().equals(fullName)) {
85 return month;
86 }
87 }
88 return null;
89 }
90
91 public static Month thisMonth() {
92 // Calendar 的月份从 0 算起,而 Month 的月份从 1 算起
93 int index = Calendar.getInstance().get(Calendar.MONTH) + 1;
94 return valueByIndex(index);
95 }
96 }