Java Notes:枚举 (Enumeration)的意义和使用

用枚举的意义在于什么?确保调用方法的时候,如果方法的参数只是某些常数,编译器仅仅进行普通的类型检查是不够的。需要让编译器确定这些常数是不是可以接受的范围内的。


利用在博文:http://blog.csdn.net/firehotest/article/details/56008900中曾提到,Font的初始化方式如下:


java.awt.Font bigFont = new Font(Font.SERIF, Font.BOLD, 20);
JLabelObject,setFont(bigFont);

观察Font的API说明发现,Font.SERIF、Font.BOLD其实都是一些常数而已。而上述的构造函数的参数只有在某些值内才有意义,但如果用户记错了顺序或者手工输入了一些范围外的int值,编译也是会通过的。需要怎么避免这种情况呢?


这时候就要用到枚举来代替常量了。如果输入的不是对应的枚举类型,那么编译器在编译的时候就会报错。因为枚举从编译后的字节码上看,本质就是一种特殊的类。这个类是final static的。


枚举类型默认是每个变量变量作为枚举类型的数据成员。所以,直接调用toString方法的话返回的是当前变量名。如果,想为当前枚举类型赋上其它的意义值可以这么做:


public class EnumTest2 {
    /**
     * Private nested enumeration of months.
     * @author Jeff Eppinger & Terry Lee
     */
    private enum Month {
        JANUARY(1), FEBRUARY(2), MARCH(3), APRIL(4), MAY(5), JUNE(6), JULY(7), AUGUST(8), SEPTEMBER(9), 
        OCTOBER(10), NOVEMBER(11), DECEMBER(12);

        private int number;

        private Month(int n) {
            number = n;
        }

        @Override
        public String toString() {
            return String.valueOf(number);
        }
    }

    /**
     * Private nested enumeration of days of the week.
     */
    private enum DayOfWeek {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;

        @Override
        public String toString() {
            switch (this) {
            case SUNDAY:
            case SATURDAY:
                return "Weekend :-)";
            case FRIDAY:
                return "TGIF!!!";
            default:
                return "Weekday :-(";
            }
        }
    }

    /**
     * Main method of test program.
     * @param args command line arguments
     */
    public static void main(String[] args) {
        printDate(Month.FEBRUARY, DayOfWeek.THURSDAY);
        System.out.println("------");
        for (DayOfWeek dow : DayOfWeek.values()) {
            System.out.println(dow);
        }
    }

    /**
     * Sample method to demo compile-time checking of parameters.
     * @param month month value
     * @param dow day of the week value
     */
    private static void printDate(Month month, DayOfWeek dow) {
        System.out.println(month + " " + dow);
    }
}






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值