您的位置:首页 > 编程语言 > Java开发

Java 小例子:如何使用 Enum

2009-04-11 14:42 344 查看
Java 在 1.5 以前,常量是个头疼的问题。因为一些参数只能取那么几个值,而从参数类型上又看不出来有哪些值可以取。从 1.5 开始 Java 引进了 Enum 枚举类型,并根据 Java 自身的特点将其进行了强化。实际上现在所有的常量都可以通过 Enum 来定义了。下面是一个例子,演示了 Enum 的基本用法,以及如何向 Enum 类型加入自定义属性。

import java.util.Calendar;
 
/**
 * 演示如何使用 Enum
 */
public class EnumValue {
 
    public static void main(String[] args) {
 
        // 演示如何使用 Weekday
        Weekday w = Weekday.Monday;
        System.out.println("w = " + w.toString());
        System.out.println("Monday compares to Friday = "
                + Weekday.Monday.compareTo(Weekday.Friday));
 
        System.out.println("Enum value of /"Sunday/" is " + Weekday.valueOf("Sunday"));
 
        try {
            System.out.println("Enum value of /"AnotherDay/" is "
                    + Weekday.valueOf("AnotherDay")); // 这里将会抛出 IllegalArgumentException
        } catch (IllegalArgumentException e) {
            System.out.println("exception: " + e.getMessage());
        }
        System.out.println();
 
        // --------------------------------
        // 演示如何使用 Month
        System.out.println("The first month is " + Month.Jan);
        System.out.println("The full name of the first month is " + Month.Jan.getFullName());
        System.out.println("The fifth month is " + Month.valueByIndex(5).getFullName());
        System.out.println("Index of August is " + Month.valueByFullName("August").getIndex());
        System.out.println("Now is " + Month.thisMonth().getFullName());
    }
}
 
/**
 * 一个表示星期几的 enum (这是一个简单的例子)
 */
enum Weekday {
    Monday, Tuesday, Wednesday, Thirsday, Friday, Saturday, Sunday
}
 
/**
 * 一个表示月份的 enum (这是一个稍微复杂的例子)
 */
enum Month {
 
    // 十二个月份
    Jan("January"),  Feb("Febrary"),   Mar("March"),
    Apr("April"),    May("May"),       June("June"),
    July("July"),    Aug("August"),    Sept("September"),
    Oct("October"),  Nov("November"),  Dec("December");
 
    // 全名
    private String fullName;
 
    // 构造方法
    Month(String fullName) {
        this.fullName = fullName;
    }
 
    public String getFullName() {
        return fullName;
    }
 
    // 获取当前 Enum 值是第几个月份。一月份则返回 1。
    public int getIndex() {
        return ordinal() + 1;
    }
 
    // 根据月数获得 enum 对象
    public static Month valueByIndex(int index) {
        for (Month month : Month.values()) {
            if (month.getIndex() == index) {
                return month;
            }
        }
        return null;
    }
 
    // 根据全名获得 enum 对象
    public static Month valueByFullName(String fullName) {
        for (Month month : Month.values()) {
            if (month.getFullName().equals(fullName)) {
                return month;
            }
        }
        return null;
    }
 
    public static Month thisMonth() {
        // Calendar 的月份从 0 算起,而 Month 的月份从 1 算起
        int index = Calendar.getInstance().get(Calendar.MONTH) + 1;
        return valueByIndex(index);
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: