/*
* 可以把 enum 看成是一個普通的 class,它們都可以定義一些屬性和方法,
* 不同之處是:enum 不能使用 extends 關鍵字繼承其他類,因爲 enum 已經繼承了 java.lang.Enum。
*/
public enum EnumDemo{
MON("星一",1), TUE("星二",2), WED("星三",3), THU("星四",4), FRI("星五",5), SAT("星六",6),SUN("星日",7),
Red("紅",11){
};
String name;
int index;
EnumDemo(String name,int index){
this.name=name;
this.index=index;
}
public String getName(int index){
for(EnumDemo e:EnumDemo.values()){
if(e.index==index)return e.name;
}
return "wrong choice,please input numbers between 1 and 7";
}
public String getName(){
return this.name;
}
public int getIndex(){
return this.index;
}
/**
* 獲取枚舉對象
* @param key key值
* @return enumDemo或null
*/
public static EnumDemo getEnumDemoByCode(Integer key) {
for (EnumDemo enumDemo : EnumDemo.values()) {
if(key != null && key.intValue() == enumDemo.getIndex()){
return enumDemo;
}
}
return null;
}
}
於vo中使用枚舉
public String getEnumDemoView() {
if(key!=null) {
EnumDemo enumDemo = EnumDemo.getEnumDemoByCode(key);
if(enumDemo !=null){
return enumDemo.getName();
}
}
return enumDemoView;
}
EnumSet&&EnumMap
//EnumSet保證集合中的元素不重複;EnumMap中的 key是enum類型,而value則可以是任意類型。
EnumSet<EnumDemo> edset=EnumSet.allOf(EnumDemo.class);
for(EnumDemo ed:edset){
// System.out.println(ed);
}
EnumMap<EnumDemo,String> edmap=new EnumMap(EnumDemo.class);
edmap.put(EnumDemo.MON, "星期一");
for(Iterator it=edmap.entrySet().iterator();it.hasNext();){
Map.Entry<EnumDemo,String> m=(Map.Entry) it.next();
//System.out.println(it.next().toString());
System.out.println(m.getKey().index+";"+m.getValue());
}
注意:
枚舉類型會由JVM在加載的時候實例化枚舉對象,JVM爲了保證每一個枚舉類元素的唯一實例,把構造函數設計成private,以此防止用戶生成實例,破壞唯一性。
因此,當修改構造方法的訪問級別時,編譯器會報錯.當然,如果在構造器前面加上private.編譯器會提示我們redundant(多餘的).