枚举类的简单应用
取自《java入门到精通》的例子
枚举:可以用来表示一组取值范围固定的变量。
enum Position { HERE, THERE } enum Size { SMALL, MEDIUM, LARGE }
枚举类可以看作是一个类,继承自java.lang.Enum。其中每一成员都是此类的一个实例化对象,并且他们被public static final 修饰。
同时枚举类也可以看作是一种数据结构,即一个枚举和它的诸多元素。
Enum类是所有枚举类型的父类,它是一个没有抽象方法的抽象类。该类定义了枚举类型的常用方法。例如枚举元素间的比较、获得枚举元素定义的次序、枚举元素定义的名称等。
表1 Enum类的常用方法
方法名 |
作用 |
compareTo(E o) |
比较枚举元素的顺序 |
equals(Object other) |
判断枚举元素是否相同 |
name() |
获得枚举元素在定义时的名称 |
ordinal() |
获得枚举元素在定义时的顺序,从0开始计数 |
//测试Enum类的方法 for (Size s : Size.values()) { //values()方法返回枚举类所有元素组成的数组 System.out.println("current item index " + s.ordinal()); //ordinal()返回当前元素的序号 System.out.println("current item compare to SMALL :" + s.compareTo(Size.SMALL)); //compareTo()返回和参数元素之间的相对位置 System.out.println("current item equals to SMALL :" + s.equals(Size.SMALL)); //Enum类型覆盖了equals()方法 System.out.println("current item == SMALL :" + (s == Size.SMALL)); System.out.println("*******************************"); }
除了不能继承外,枚举类型可以看做是普通类。这意味着您可以在枚举类型中增加方法,甚至是main方法。由于toString()方法只是简单的返回定义枚举变量时指定的名称,提供的信息非常有限。可以为枚举类型提供一个构造方法来增加额外的信息,并提供相应的方法来获得这些信息。
enum PizzaSize { SMALL("i am small pizza"), MEDIUM("i am medium pizza"), LAEGE( "i am large pizza");//申明枚举元素同时调用构造方法 private String description;//私有的成员变量 private PizzaSize(String description) {//构造方法初始化 this.description = description; } public String getSize() {//私有内容的getfangfa return description; } }
测试上面的枚举:
for (PizzaSize ps : PizzaSize.values()) { System.out.println(ps.toString() + ":" + ps.getSize()); }
把枚举类型看作是一种数据结构,可以增强对数据访问的安全性,访问者不能要求访问不存在的数据。
enum JDBCInfo { DRIVER, URL, USERNAME, PASSWORD;// jdbc连接参数 public static String getJDBCInfo(JDBCInfo info) {// 根据枚举类元素的种类来获取数据 switch (info) { // switch支持枚举类 case DRIVER: return "com.mysql.jdbc.driver"; case URL: return "jdbc:mqsql://localhost:3306/db_database"; case USERNAME: return "username"; case PASSWORD: return "password"; default: return null; } } }
测试上面的枚举类:
// 使用enum类型表示jdbc参数 for (JDBCInfo info : JDBCInfo.values()) { System.out.println(info.toString() + ":" + JDBCInfo.getJDBCInfo(info)); }