枚舉的ordinal方法返回枚舉項(xiàng)在枚舉類中出現(xiàn)的序號(hào)
如下例子:
public enum Light {
// 紅燈
RED,
//綠燈
GREEN,
// 黃燈
YELLOW;
}
public static void main(String[] args) {
System.out.println(Light.GREEN.ordinal());
}
輸出結(jié)果是:1
類似數(shù)組的下標(biāo)。
很多業(yè)務(wù)需求中,枚舉是與int相關(guān)聯(lián)的,如果你不在枚舉類中規(guī)定int,那么可以通過ordinal方法直接獲取枚舉項(xiàng)的序號(hào)。但這樣不夠直觀,而且不易維護(hù)(只能在尾部添加,不然會(huì)造成數(shù)據(jù)混亂)。試想當(dāng)枚舉項(xiàng)越來越多的時(shí)候,想要知道枚舉項(xiàng)對應(yīng)的int值是多少并不容易。
Enum規(guī)范中談到ordinal時(shí)這么寫到:“大多數(shù)的程序員都不需要這個(gè)方法。它是設(shè)計(jì)成用于像EnumSet和EnumMap這種基于枚舉的通用數(shù)據(jù)結(jié)構(gòu)的?!背悄阍诰帉懙氖沁@種數(shù)據(jù)結(jié)構(gòu),否則最好完全避免使用ordinal方法。
所以盡量避免使用ordinal
枚舉的一般使用
public enum Light {
// 紅燈
RED(0),
//綠燈
GREEN(1),
// 黃燈
YELLOW(2);
private Integer id;
Light(Integer id) {
this.id = id;
}
public Integer getId(){
return this.id;
}
}
public static void main(String[] args) {
System.out.println(Light.GREEN.id);
}
輸出結(jié)果是:1