枚举类的简单应用

取自《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));
}

 

 

posted @ 2014-05-11 21:24  mycome  阅读(1254)  评论(0编辑  收藏  举报