列舉在Java的功用通常是定義對應表或是常數
比較常見的用法在網路上都查的到
這邊打一個中文網站上比較少見的用法,就是當對應表使用
使用這個最大的好處是當你有好多地方用到這個對應表時
當對應表做了修改你不用把每個地方都改掉值
只要改掉列舉這一個地方全部地方會會自動改好
首先你需要定義enum的constructor以及這個enum的屬性及方法, 以下這個範例是用兩個屬性去做對應表
並且定義了一個方法getDescrByName,他可以用輸入的英文名稱(name)去查對應的中文名稱(desc)
public class Config {
public enum Status{
CANCEL("cancel","已取消"),
REQUEST("request", "申請送出"),
ASSIGN("assign", "已指定"),
APPROVE("approve", "已同意");
private String name;
private String desc;
Status(String name, String desc){
this.name = name;
this.desc = desc;
}
public static String getDescrByName(String name){
String result = null;
Status[] values = Status.values();
for(Status value : values){
if(value.getName().equals(name)){
result = value.getDesc();
break;
}
}
return result;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
}
接著執行
public class Demo {
public static void main(String[] args) {
System.out.println(Config.Status.getDescrByName("cancel"));
System.out.println(Config.Status.getDescrByName("request"));
System.out.println(Config.Status.getDescrByName("assign"));
System.out.println(Config.Status.getDescrByName("approve"));
}
}
輸出結果為:
已取消
申請送出
已指定
已同意
列舉同樣可以利用jstl來建立servlet的下拉選單
<c:set var="statusList" value="<%=Config.Status.values()%>" />
<select id = "status">
<option>不指定</option>
<c:forEach var="status" items="${statusList}">
<option value="${status.getName()}">${status.getDesc()}</option>
</c:forEach>
</select>
這樣的下拉選單如下