枚举类的实现
早期时候的实现形式:
1
2
3
4public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FAIL = 3;
public static final int SEASON_WINTER = 4;这种方式虽然实现简单,但存在很多问题:
①类型不安全(二者可运算)
②没有命名空间
③打印输出的意义不明确
如今的枚举实现:
- Java5以后增加了enum关键字(与class、interface地位相同)来定义枚举。可以拥有成员变量、方法,可以实现一个或多个接口,也可定义构造器。一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java源文件也必须和该枚举类的类名相同
- 枚举类与普通类的区别:
- 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口
- 使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类
- 枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private
- 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远不能产生实例
枚举类默认提供了一个value()方法,该方法可以很便捷的遍历所有的枚举值
1
2
3public enum SeasonEnum{
SPRING,SUMMER,FAIL,WINTER;
}在使用时候可以这样:
SeasonEnum.SPRING
。在switch使用时可直接用SPRING
- java.lang.Enum类提供了以下方法:
int compareTo (E o)
:该方法用于与指定枚举对象比较顺序,同一个枚举实例只能和相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;如果该枚举对象位于指定枚举对象之前,则返回负数,否则返回零String name()
:返回枚举实例的名称int ordinal()
:返回枚举值在枚举类中的索引值String toString()
:返回枚举常量的名称public static <T extends Enum<T>>T valueOf(Class<T> enumType,String name)
:返回指定枚举类中指定名称的枚举值
枚举类的成员变量、方法和构造函数
1 | public enum Gender { |
1 | public enum Gender{ |
1 | public enum Gender{ |
- 其实也就相当于以下代码:
1
2public static final Gender MALE = new Gender("男");
public static final Gender FEMALE = new Gender("女");
实现接口的枚举类
1 | public enum Gender implements GenderDesc{ |
- 以上就是由匿名子类实现的
包含抽象方法的枚举类
1 | public enum Operation{ |