枚举是一种规范它规范了参数的形式,这样就可以不用考虑类型的不匹配并且显式的替代了int型参数可能带来的模糊概念 枚举像一个类,又像一个数组。
Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。
1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。
2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
3.Enum默认实现了java.lang.Comparable接口。
4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.
5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。
6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。
7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。
例子:
案例一:定义一些单号前缀,使用 InvLogRefType.ReceivingOrder.getValue() 即可得到。
public enum InvLogRefType
{
/**
* 入库单
*/
ReceivingOrder("RO"),
/**
* 订单
*/
DeliveryOrder("DO"),
/**
* 拣货单
*/
PickingList("PL"),
/**
* 库存盘点
*/
StockCount("SC"),
/**
* 出库单
*/
ShippingOrder("SO"),
/**
* 库存初始化
*/
INIT("Init");
private String value;
private InvLogRefType(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
}
案例二:定义key-value格式数据,再定义个根据key获取value的方法,通过
country = Market2Country.getCountryByMarket(market); 调用
/**
* 维护Market和国家的对应关系配置类
*/
public enum Market2Country {
// 维护Market对Country映射表
DATA1("MKT-AU","AU"),
DATA2("MKT-CAN","CA"),
DATA3("MKT-CN","CN"),
DATA4("MKT-DE","DE"),
DATA5("MKT-DE-OTTO","DE"),
DATA6("MKT-ES","ES"),
DATA7("MKT-FR","FR"),
DATA8("MKT-IN","IN"),
DATA9("MKT-IT","IT"),
DATA10("MKT-JP","JP"),
DATA11("MKT-MX","MX"),
DATA12("MKT-NEWEGG","US"),
DATA13("MKT-UK","UK"),
DATA14("MKT-US","US"),
// 维护Company对Country映射表
DATA15("Amazon-CAN-STK","CA"),
DATA16("Amazon-CN-LYT","CN"),
DATA17("Amazon-DE-ZBT","DE"),
DATA18("Amazon-US-CMTL","US"),
DATA19("Amazon-US-D2G","US"),
DATA20("Amazon-US-DH","US"),
DATA21("Amazon-US-DM01","US"),
DATA22("Amazon-US-SH","US"),
DATA23("Amazon-US-STK","US"),
DATA24("Amazon2-CAN-STK","CA"),
DATA25("Amazon2-US-STK","US"),
DATA26("Ebay-DE-HOOTOO","DE"),
DATA27("Ebay-DE-Trading","DE"),
DATA28("FBA-CAN-STK","CA"),
DATA29("FBA-CN-LYT","CN"),
DATA30("FBA-DE-PP1","PP1-DE"),
DATA31("FBA-DE-ZBT","DE"),
DATA32("FBA-ES-NBE","ES"),
DATA33("FBA-ES-PP1","PP1-ES"),
DATA34("FBA-ES-SKL","ES"),
DATA35("FBA-ES-STK","ES"),
DATA36("FBA-FR-DH","FR"),
DATA37("FBA-FR-NBE","FR"),
DATA38("FBA-FR-PP1","PP1-FR"),
DATA39("FBA-FR-SKL","FR"),
DATA40("FBA-FR-STK","FR"),
DATA41("FBA-IT-NBE","IT"),
DATA42("FBA-IT-PP1","PP1-IT"),
DATA43("FBA-IT-SKL","IT"),
DATA44("FBA-IT-STK","IT"),
DATA45("FBA-JP-JB","JP"),
DATA46("FBA-JP-NBD","JP"),
DATA47("FBA-JP-PP1","PP1-JP"),
DATA48("FBA-JP-STK","JP"),
DATA49("FBA-UK-DH","UK"),
DATA50("FBA-UK-NBE","UK"),
DATA51("FBA-UK-PP1","UK"),
DATA52("FBA-UK-SKL","UK"),
DATA53("FBA-UK-STK","UK"),
DATA54("FBA-US-CMTL","US"),
DATA55("FBA-US-D2G","US"),
DATA56("FBA-US-DH","US"),
DATA57("FBA-US-DM01","US"),
DATA58("FBA-US-PP1","US"),
DATA59("FBA-US-SH","US"),
DATA60("FBA-US-STK","US"),
DATA61("FBA2-CAN-STK","CA"),
DATA62("FBA2-US-STK","US"),
DATA63("FBC-FR-SKL","FR"),
DATA64("NEWEGG-ProTrend","US"),
DATA65("Newegg-US-Sunvalley","US"),
DATA66("Newegg-US-Wholesale","US"),
DATA67("OF-EU-ZBT","OF-EU"),
DATA68("OF-JP-NBD","OF-JP"),
DATA69("OF-US-STK","US"),
DATA70("Online-WalMart-US","US"),
DATA71("Online-Wholesale-CA","CA"),
DATA72("Online-Wholesale-DE","DE"),
DATA73("Online-Wholesale-ES","ES"),
DATA74("Online-Wholesale-FR","FR"),
DATA75("Online-Wholesale-IT","IT"),
DATA76("Online-Wholesale-JP","JP"),
DATA77("Other-Hold-DE","DE"),
DATA78("Other-hootoo_de","DE"),
DATA79("Other-Yatego-DE","DE"),
DATA80("OTTO-DE-ZBT","OF-EU"),
DATA81("RKT-JP-NBD","JP"),
DATA82("FBA-US-MRC","US"),
DATA83("Amazon-US-MRC","US");
private final String market;
private final String country;
private static final Map<String, String> mMap = Collections.unmodifiableMap(initializeMapping());
Market2Country(String market, String country) {
this.market = market;
this.country = country;
}
public String getMarket() {
return market;
}
public String getCountry() {
return country;
}
public static String getCountryByMarket(String market) {
if (null == mMap) {
initializeMapping();
}
if (mMap.containsKey(market)) {
return mMap.get(market);
}
return null;
}
private static Map<String,String> initializeMapping() {
Map<String,String> mMap = new HashMap<String, String>();
for (Market2Country s : Market2Country.values()) {
mMap.put(s.market, s.country);
}
return mMap;
}
}