当进行编程开发时,需要一组固定的常量来表示需要的类型,如使用一组 int
常量表示一周的日期:
public class Week {
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WEDNESDAY = 3;
public static final int THURSDAY = 4;
public static final int FIRDAY = 5;
public static final int SATURDAY = 6;
public static final int SUNDAY = 7;
}
这种方法称作 int
枚举模式。接下来设计一个使用日期的方法:
public static boolean alarm(LocalTime time, int[] weeks) {
......
}
上述设置闹铃的方法中,第二个参数是传入日期数组,在 weeks
数组中的每个 int
值都必须在 1~7
之间,但因为传入的 int
值可以是任何值,不具有类型安全性,也几乎没有描述性可言,且编译时也不会提出任何警告;而且需要遍历 Week
类中所有表示星期的值的方式也没有。当然,这种设置常量的类型也不仅局限在 int
类型中,也可以使用 String
设置常量,被称为 String
枚举模式。但是,这种使用 int
、String
或其它类型设置的枚举模式不是太可靠。
枚举
在这种情况下,Java 在 1.5 版本中引入枚举类型来解决 int
和 String
枚举模式所带有的缺点。使用 enum
定义的枚举类,是 Object
的子类,继承自 java.lang.Enum>
抽象类,不能继承其它类。
public abstract class Enum<E extends Enum<E>>implements Comparable<E>, Serializable {
......
}
接下来,将上面的 Week
类重新编写:
public enum Week {
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FIRDAY,SATURDAY,SUNDAY;
}
在以参数方式传入方法:
public static boolean alarm(LocalTime time, Week[] weeks) {
......
}
重写编写后,Week[]
作为第二个参数,传入的每个 Week
值都是 Week
枚举类中的有效值之一,保证了编译时的类型安全。
原理
但其实,在 Week
枚举类中设置的枚举值,如MONDAY
、TUESDAY
... SUNDAY
其实本质上是 int
值。