4. Enum
4.1 枚举的特征
枚举是类的一种
枚举扩展自java.lang.Enum
枚举中每一个声明的值是枚举类型的一个实例
枚举没有公共的构造方法
枚举中的值都是public static final的
枚举中的值可以用==或equals()方法判等
枚举实现了java.lang.Comparable接口,可以通过compareTo()方法进行比较
枚举覆写了toString()方法,返回枚举中值的名称
枚举提供了valueOf()方法返回枚举的值(注:valueOf()方法与toString()方法对应,如果改变了toString()方法,请同时修改valueOf()方法)
枚举定义了一个final的实例方法ordinal(),返回值在枚举中的整数坐标,以0开始(注:一般由其他辅助设施使用,不直接在代码中使用)
枚举定义了values()方法,返回枚举中定义的所有值(一般在遍历时使用)
4.2 枚举的组成枚举类型的基本组成元素包括:
enum关键字
名称
允许使用的值的列表除上述基本元素,枚举类型还可以:
实现接口
定义变量
定义方法
与值对应的类的定义体
4.3 代码示例
4.3.1 创建枚举类型
public enum Grade { A, B, C, D, F, INCOMPLETE };
这是枚举类型的最基本的创建方式,也是最常用的方式。
4.3.2 内联方式(inline)创建
枚举还可以通过内联方式创建:
public class Report { public static enum Grade1 {A, B, C}; // the "static" keyword is redundant. public enum Grade2 {A, B, C};}
注意static关键字是默认的,不需显式声明。
4.3.3 定义变量和方法
public enum Grade { // enum values must be at the top. A("excellent"), B("good"), C("pass"), F("fail"); // there is a semicolon. // field private String description; // the constructor must be private(the compiler set it by default) // so it can be omitted. private Grade(String description) { this.description = description; } // method public String getDescription() { return this.description; }}
枚举的值定义在最上方,最后一个值的定义由";"结束。
构造器必须为private,由编译器自动添加,不需显式声明。
4.3.4 与值对应的类的定义体
public enum Grade implements Descriptable { A("excellent") { @Override public String getDescription() { return "congratulations! you got an excellent grade!"; } }, B("good") { @Override public String getDescription() { return "well done! your grade is good!"; } }, C("pass") { @Override public String getDescription() { return "you passed the exam."; } }, F("fail") { @Override public String getDescription() { return "sorry, you failed the exam!"; } }; private String description; Grade(String description) { this.description = description; }}public interface Descriptable { String getDescription();}
枚举可实现接口,并可以在每个值上提供特定的实现。