Java 在 1.5 以前,常量是个头疼的问题。因为一些参数只能取那么几个值,而从参数类型上又看不出来有哪些值可以取。从 1.5 开始 Java 引进了 Enum 枚举类型,并根据 Java 自身的特点将其进行了强化。实际上现在所有的常量都可以通过 Enum 来定义了。下面是一个例子,演示了 Enum 的基本用法,以及如何向 Enum 类型加入自定义属性。
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
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 }
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 }