在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。
在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法。
1、颜色枚举
package com.meiju;
/**
* 简单应用,color
*/
public enum ColorEnum {
blue, wite, red, green, yellow;
private final static String cloe = "blue";
public static ColorEnum getSeason() {
if ("blue".equals(cloe))
return blue;
else
return wite;
}
}
package com.test;
import com.meiju.ColorEnum;
public class ColorEnumTest {
public static void main(String[] args) {
System.out.println("颜色:" + ColorEnum.wite);
System.out.println("颜色:" + ColorEnum.red);
}
}
输出结果:
颜色:wite
颜色:red
2、性别枚举
package com.meiju;
/**
* 性别,实现带有构造器的枚举
*/
public enum GenderEnum {
//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错
//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错
MAN("MAN"), WOMEN("WOMEN");
public final String value;
//构造器默认也只能是private, 从而保证构造函数只能在内部使用
GenderEnum(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
package com.test;
import com.meiju.GenderEnum;
public class GenderEnumTest {
public static void main(String[] args) {
System.out.println("性别:" + GenderEnum.MAN);
System.out.println("性别:" + GenderEnum.MAN.getValue());
}
}
输出结果:
性别:MAN
性别:MAN
3、管理员枚举
package com.meiju;
import java.util.ArrayList;
import java.util.List;
public enum NameEnum {
//枚举
XMMCODE("XMMCODE", "熊某某"), LMMCODE("LMMCODE", "李某某"), ZMMCODE("ZMMCODE", "张某某");
//枚举的类和value
private String key;
private String value;
private NameEnum(String key, String value) {
this.key = key;
this.value = value;
}
public static NameEnum getEnum(String key) {
for (NameEnum type : NameEnum.values()) {
if (type.key.equals(key)) {
return type;
}
}
return null;
}
public static List<NameEnum> getEnumList() {
List<NameEnum> enumList = new ArrayList<NameEnum>();
for (NameEnum e : NameEnum.values()) {
enumList.add(e);
}
return enumList;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}
package com.test;
import com.meiju.NameEnum;
public class NameEnumTest {
public static void main(String[] args) {
System.out.println("管理员key:" + NameEnum.XMMCODE);
System.out.println("管理员key:" + NameEnum.XMMCODE.getKey());
System.out.println("管理员姓名:" + NameEnum.XMMCODE.getValue());
}
}
输出结果:
管理员key:XMMCODE
管理员key:XMMCODE
管理员姓名:熊某某
4、订单状态枚举
package com.meiju;
/**
* 订单状态, 实现带有抽象方法的枚举
*/
public enum OrderStateEnum {
//已取消
CANCEL {public String getName() {return "已取消";}},
//待审核
WAITCONFIRM {public String getName() {return "待审核";}},
//等待付款
WAITPAYMENT {public String getName() {return "等待付款";}},
//正在配货
ADMEASUREPRODUCT {public String getName() {return "正在配货";}},
//等待发货
WAITDELIVER {public String getName() {return "等待发货";}},
//已发货
DELIVERED {public String getName() {return "已发货";}},
//已收货
RECEIVED {public String getName() {return "已收货";}};
public abstract String getName();
}
package com.test;
import com.meiju.OrderStateEnum;
public class OrderStateEnumTest {
public static void main(String[] args) {
System.out.println("订单状态:" + OrderStateEnum.CANCEL);
System.out.println("订单状态:" + OrderStateEnum.CANCEL.getName());
}
}
输出结果:
订单状态:CANCEL
订单状态:已取消
5、索引枚举
package com.meiju;
/**
* 索引
*/
public enum SerialEnum {
//位数,中文解说,code,开始值
SERIAL_NUMBER(12, "流水号", "SERIAL_NUMBER", 100000000000L),
TEST_ID(12, "测试序列", "TEST_ID", 100000000000L),
TEST_INDEX(10, "测试索引", "TEST_INDEX", 1L);
private Integer serialEnumLength;
private String SerialEnumName;
private String SerialEnumCode;
private Long startEnumSn;
SerialEnum(Integer serialEnumLength, String SerialEnumName, String SerialEnumCode, Long startEnumSn) {
this.SerialEnumCode = SerialEnumCode;
this.serialEnumLength = serialEnumLength;
this.SerialEnumName = SerialEnumName;
this.startEnumSn = startEnumSn;
}
public Integer getSerialEnumLength() {
return serialEnumLength;
}
public void setSerialEnumLength(Integer serialEnumLength) {
this.serialEnumLength = serialEnumLength;
}
public String getSerialEnumName() {
return SerialEnumName;
}
public void setSerialEnumName(String serialEnumName) {
SerialEnumName = serialEnumName;
}
public String getSerialEnumCode() {
return SerialEnumCode;
}
public void setSerialEnumCode(String serialEnumCode) {
SerialEnumCode = serialEnumCode;
}
public Long getStartEnumSn() {
return startEnumSn;
}
public void setStartEnumSn(Long startEnumSn) {
this.startEnumSn = startEnumSn;
}
}
package com.test;
import com.meiju.SerialEnum;
public class SerialEnumTest {
public static void main(String[] args) {
System.out.println("索引code:" + SerialEnum.SERIAL_NUMBER.getSerialEnumCode());
System.out.println("索引中文解释:" + SerialEnum.SERIAL_NUMBER.getSerialEnumName());
System.out.println("索引开始值:" + SerialEnum.SERIAL_NUMBER.getStartEnumSn());
System.out.println("索引长度:" + SerialEnum.SERIAL_NUMBER.getSerialEnumLength());
}
}
输出结果:
索引code:SERIAL_NUMBER
索引中文解释:流水号
索引开始值:100000000000
索引长度:12
99、总结
package com.test;
import com.meiju.ColorEnum;
import com.meiju.GenderEnum;
import com.meiju.OrderStateEnum;
public class Enumtest {
public static void main(String[] args) {
//枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值
ColorEnum colorEnum = ColorEnum.blue;
switch (colorEnum) {
case red:
System.out.println("color is red");
break;
case green:
System.out.println("color is green");
break;
case yellow:
System.out.println("color is yellow");
break;
case blue:
System.out.println("color is blue");
break;
default :
break;
}
//遍历枚举
System.out.println("遍历ColorEnum枚举中的值");
for(ColorEnum color : ColorEnum.values()){
System.out.println(color);
}
//获取枚举的个数
System.out.println("ColorEnum枚举中的值有"+ColorEnum.values().length+"个");
//获取枚举的索引位置,默认从0开始
System.out.println(ColorEnum.red.ordinal());//0
System.out.println(ColorEnum.green.ordinal());//1
System.out.println(ColorEnum.yellow.ordinal());//2
System.out.println(ColorEnum.blue.ordinal());//3
//枚举默认实现了java.lang.Comparable接口
System.out.println(ColorEnum.red.compareTo(ColorEnum.green));//-1
System.err.println("颜色为" + ColorEnum.getSeason());
System.out.println("===========");
for(GenderEnum gender : GenderEnum.values()){
System.out.println(gender.value);
}
System.out.println("===========");
for(OrderStateEnum order : OrderStateEnum.values()){
System.out.println(order.getName());
}
}
}