package?com.school.stereotype;?
成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、五寨網(wǎng)絡(luò)推廣、成都小程序開(kāi)發(fā)、五寨網(wǎng)絡(luò)營(yíng)銷(xiāo)、五寨企業(yè)策劃、五寨品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供五寨建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):028-86922220,官方網(wǎng)址:www.cdcxhl.com
/**?
*?活動(dòng)枚舉類(lèi)型?
*?@author?QiXuan.Chen?
*/
public?enum?EventStatus?{?
/**?
*?未發(fā)布。?
*/?
DRAFT("DRAFT",?"未發(fā)布"),?
/**?
*?已發(fā)布。?
*/
PUBLISHED("PUBLISHED",?"已發(fā)布");?
/**?
*?活動(dòng)狀態(tài)的值。?
*/
private?String?value;?
/**?
*?活動(dòng)狀態(tài)的中文描述。?
*/
private?String?text;?
/**?
*?@param?status?活動(dòng)狀態(tài)的值?
*?@param?desc?活動(dòng)狀態(tài)的中文描述?
*/
private?EventStatus(String?status,?String?desc)?{?
value?=?status;?
text?=?desc;?
}?
/**?
*?@return?當(dāng)前枚舉對(duì)象的值。?
*/
public?String?getValue()?{?
return?value;?
}?
/**?
*?@return?當(dāng)前狀態(tài)的中文描述。?
*/
public?String?getText()?{?
return?text;?
}?
/**?
*?根據(jù)活動(dòng)狀態(tài)的值獲取枚舉對(duì)象。?
*?
*?@param?status?活動(dòng)狀態(tài)的值?
*?@return?枚舉對(duì)象?
*/
public?static?EventStatus?getInstance(String?status)?{?
EventStatus[]?allStatus?=?EventStatus.values();?
for?(EventStatus?ws?:?allStatus)?{?
if?(ws.getValue().equalsIgnoreCase(status))?{?
return?ws;?
}?
}?
throw?new?IllegalArgumentException("status值非法,沒(méi)有符合課程狀態(tài)的枚舉對(duì)象");?
}?
}
枚舉(enum)類(lèi)型是Java 5新增的特性,它是一種新的類(lèi)型,允許用常量來(lái)表示特定的數(shù)據(jù)片斷,而且全部都以類(lèi)型安全的形式來(lái)表示。
1、常量的使用
在JDK1.5之前,我們定義常量都是:public static fianl....?,F(xiàn)在好了,有了枚舉,可以把相關(guān)的常量分組到一個(gè)枚舉類(lèi)型里,而且枚舉提供了比常量更多的方法。
1234567
package com; public enum Color { RED, GREEN, BLANK, YELLOW }
使用
123456789101112131415161718192021
package com; public class B { public static void main(String[] args) { System.out.println( isRed( Color.BLANK ) ) ; //結(jié)果: false System.out.println( isRed( Color.RED ) ) ; //結(jié)果: true } static boolean isRed( Color color ){ if ( Color.RED.equals( color )) { return true ; } return false ; } }
或者 switch 的使用
12345678910111213141516171819202122232425
package com; public class B { public static void main(String[] args) { showColor( Color.RED ); } static void showColor(Color color){ switch ( color ) { case BLANK: System.out.println( color ); break; case RED : System.out.println( color ); break; default: System.out.println( color ); break; } }}
2、自定義函數(shù)
package com; public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4); private String name ; private int index ; private Color( String name , int index ){ this.name = name ; this.index = index ; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }
使用
package com; public class B { public static void main(String[] args) { //輸出某一枚舉的值 System.out.println( Color.RED.getName() ); System.out.println( Color.RED.getIndex() ); //遍歷所有的枚舉 for( Color color : Color.values()){ System.out.println( color + " name: " + color.getName() + " index: " + color.getIndex() ); } } }
結(jié)果
紅色
1
RED name: 紅色 index: 1
GREEN name: 綠色 index: 2
BLANK name: 白色 index: 3
YELLO name: 黃色 index: 4
總結(jié):
1、枚舉的本質(zhì)是類(lèi),在沒(méi)有枚舉之前,仍然可以按照java最基本的編程手段來(lái)解決需要用到枚舉的地方。枚舉屏蔽了枚舉值的類(lèi)型信息,不像在用public static final定義變量必須指定類(lèi)型。枚舉是用來(lái)構(gòu)建常量數(shù)據(jù)結(jié)構(gòu)的模板,這個(gè)模板可擴(kuò)展。枚舉的使用增強(qiáng)了程序的健壯性,比如在引用一個(gè)不存在的枚舉值的時(shí)候,編譯器會(huì)報(bào)錯(cuò)。枚舉的更多用法還需要在開(kāi)發(fā)中去研究創(chuàng)造,Java5、Java6增加了不少新的特性,技術(shù)在升級(jí),對(duì)程序員來(lái)說(shuō)就要學(xué)習(xí),如果你熱愛(ài)java的話(huà)。否則別人用到新特性的代碼你看不懂,那才叫郁悶。
2、枚舉在Java家族中只占了很小的一塊比重,所以我在項(xiàng)目中用枚舉的地方不是很多,畢竟,一個(gè)項(xiàng)目是很多人開(kāi)發(fā)維護(hù)的,用一個(gè)陌生的東西,會(huì)給其他的同事造成閱讀困難。所以常量大都是用public static final 來(lái)定義的。
java中可以私用enummap來(lái)保存枚舉值,示例如下:
private?static?void?testEnumMap()?{
//?1.?演示定義?EnumMap?對(duì)象,?EnumMap?對(duì)象的構(gòu)造函數(shù)需要參數(shù)傳入?,?默認(rèn)是key?的類(lèi)的類(lèi)型
EnumMapLight,?String?currEnumMap?=?new?EnumMapLight,?String(
Light.?class?);
currEnumMap.put(Light.?RED?,?"?紅燈?"?);
currEnumMap.put(Light.?GREEN?,?"?綠燈?"?);
currEnumMap.put(Light.?YELLOW?,?"?黃燈?"?);
//?2.?遍歷對(duì)象
for?(Light?aLight?:?Light.values?())?{
System.?out?.println(?"[key="?+?aLight.name()?+?",value="
+?currEnumMap.get(aLight)?+?"]"?);
}
}
你可以把枚舉當(dāng)作是一種類(lèi)型,比如enum Size你可以看作class Size這樣的聲明。
然后,SMLL("S")是什么意思呢,就相當(dāng)于你在class Size這個(gè)類(lèi)內(nèi)部定義了這樣一個(gè)常量對(duì)象:
public static final Size SMLL = new Size("S");
只不過(guò)用枚舉的話(huà)這樣這樣的聲明方式被簡(jiǎn)成SMLL("S"),這是聲明枚舉常量的方式,比較簡(jiǎn)單。就是說(shuō)這樣等于是調(diào)用了private Size(String abbreviation) {this.abbreviation = abbreviation; }這個(gè)構(gòu)造函數(shù)。
Java中具有多個(gè)值的枚舉, 具有字符串值的 Java 枚舉, 枚舉與 Java
為了得到好,有兩種方法可以實(shí)現(xiàn)這一點(diǎn),第一種是為每個(gè)枚舉常量覆蓋 toString() 方法,第二種是使用實(shí)例變量來(lái)保存。