Java Enum 范例

Java 列举(Enum)范例

Enum:  Day.SUNDAY。。Day.MONDAY

Enum中文会翻成列举,它的用途是定义常数与名称的关系,在程式直接使用名称来帮助程式可读性。

Java上比较像C的structure应该就是enum,如果主力不是Java而不常在使用可能会忘记它的用法,这里建立名称为Day的列画,内容是星期几的英文名字,像SUNDAYMONDAY

基本范例

没有特别需求,使用预设分配常数值,如下的范例:

//-----------start-----------
public enum Day {
    SUNDAY,
    MONDAY,
    SATURDAY
}
//------------end------------

列举Day名称

透过values取得所有项目,再利用方法nametoString 将Day中的名称印出来:

//-----------start-----------
for(Day day: Day.values())
    System.out.println(day.name());
}
//------------end------------

//-----------start-----------
for(Day day: Day.values()) {
    System.out.println(day.toString());
}
//------------end------------

输出结果:

SUNDAY
MONDAY
SATURDAY

列举Day值

前面范例只印出Day列举中的名称,下面的范例会印出它的名称及值,借此可以知道常数值是怎么分配的:

//-----------start-----------
for(Day day: Day.values()) {
    System.out.println(day.toString() + "=" + day.ordinal());
}
//------------end------------

当你宣告列举时,会依照顺序分配一个排序值存入私有变数ordinal再利用 ordinal()这个方法取得其值,范例会透过values()取得所有的列举物件后再印出ordinal()值,输出结果:

SUNDAY=0
MONDAY=1
SATURDAY=2

从输出结果能知道它的值是由整数值的0开始累加1分配。

进阶范例

其实Enum是利用Class、Interface加上Compiler自动生成一些程式码所组成的,所以你可以在使用你建立的enum之前定义它的变数、方法…等。 下面范例可以指定你定义的enum它实际代表的值为何:

//-----------start-----------
public enum Day {
    SUNDAY(4),
    MONDAY(5),
    SATURDAY(11);

    private int value;

    private Day(int value) {
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}
//------------end------------

列举Day名称代表的值

上述程式有实作代表数值部分,如此一来能使用Day.SUNDAY.getValue取得你定义的值(SUNDAY=11),列举整个名称代表的值:

//-----------start-----------
for(Day day: Day.values()) {
    System.out.println("name:" + day.name() + "\nvalue:" + day.getValue());
}
//------------end------------

输出结果:

name:SUNDAY
value:4
name:MONDAY
value:5
name:SATURDAY
value:11

覆写列举中的方法

前面介绍的为基本的范例,另外你也可以Override覆写方法像是toString

//-----------start-----------
@Override
public String toString() {
    switch(this) {
        case SUNDAY:
            return "Sunday: " + value;
        case MONDAY:
            return "Monday: " + value;
        case SATURDAY:
            return "Saturday: " + value;
        default:
            return null;
    }
}
//------------end------------

列举 Day并使用toString

使用覆写toString的新方法印出名称(第一个字母大写)、代表的值。

//-----------start-----------
for(Day day: Day.values()) {
    System.out.println(day.toString());
}
//------------end------------

输出结果:

Sunday: 4
Monday: 5
Saturday: 11

参考资料

更新日志

日期 内容
2017/07/24 增加”列举Day值”及修正文字
2015/03/24 初版

关键字

  • Java Enum
  • Java 列举
  • Java 列举(Enum)范例