枚举类型

2019-07-21  本文已影响0人  云烟渐成雨

由于枚举类型的实例是常量,因此按照命名惯例都用大写字母表示(如果一个名字中有多个单词,用下划线隔开)。

public enum Spiciness {
        NOT, MILD, MEDIUM, HOT, FLAMING
}

为了使用enum,需要创建一个该类型的引用,并将其赋值给某个实例:

public class SimpleEnumUse {

    public static void main(String[] args) {
        Spiciness howHot = Spiciness.HOT;
        System.out.println(howHot);
    }

}

运行结果:

HOT

当创建enum时,编译器会自动添加一些特性。例如会创建toString()方法,便于显示某个enum实例的名字,还会创建ordinal()方法,用来表示某个特定enum常量的声明顺序,以及static values()方法,用来按照enum常量的声明顺序,产生由这些常量 值构成的数组。

class EnumOrder {
    public static void main(String[] args) {
        for (SimpleEnumUse.Spiciness s : SimpleEnumUse.Spiciness.values()) {
            System.out.println(s + ",ordinal" + s.ordinal());
        }
    }
}

运行结果:

NOT,ordinal:0
MILD,ordinal:1
MEDIUM,ordinal:2
HOT,ordinal:3
FLAMING,ordinal:4

enum看起来像一个新的数据类型,但是enum是一个类,可以有自己的方法。

enum有一个很实用的特性,即它可以在switch语句内使用

class SwitchTest {
    SimpleEnumUse.Spiciness degree;

    public SwitchTest(SimpleEnumUse.Spiciness degree) {
        this.degree = degree;
    }

    public void describe() {
        System.out.println("This degree is ");
        switch (degree) {
            case NOT:
                System.out.println("not");
                break;
            case MILD:
            case MEDIUM:
                System.out.println("medium");
                break;
            case HOT:
            case FLAMING:
            default:
                System.out.println("hot");
        }
    }

    public static void main(String[] args) {
        SwitchTest not, medium, hot;
        not = new SwitchTest(SimpleEnumUse.Spiciness.NOT);
        medium = new SwitchTest(SimpleEnumUse.Spiciness.MEDIUM);
        hot = new SwitchTest(SimpleEnumUse.Spiciness.HOT);
        not.describe();
        medium.describe();
        hot.describe();
    }
}

运行结果:

This degree is 
not
This degree is 
medium
This degree is 
hot

由于switch是要在有限的可能值集合中进行选择,因此它和enum很适合组合使用

上一篇 下一篇

猜你喜欢

热点阅读