jdk1.5之后加入了枚举类新特性。
最简单的枚举使用方式
/**
* 季节枚举类
*
* @author Gary
* @return
* @date 2019-04-27 19:24
*/
public enum SeasonEnum {
SPRING, SUMMER, AUTUMN, WINTER
}
用法举例:
SeasonEnum spring = SeasonEnum.SPRING;
System.out.println("SPRING枚举值:" + spring.name());
输出为:
SPRING枚举值:SPRING
有构造方法的枚举类(构造方法有一个参数)
/**
* 订单状态枚举类
*
* @author Gary
* @date 2019-04-27 19:29
*/
public enum StatusEnum {
//未开始
NotStart(0),
//执行中
Doing(1),
//暂停
Pause(2),
//已完成
Completed(3),
//删除
Del(4),
//提前结束
CutShort(5);
private int index;
StatusEnum(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
/**
* 根据index返回对应的枚举值
*
* @param index
* @return
*/
public static StatusEnum getValueByIndex(int index) {
switch (index) {
case 0:
return NotStart;
case 1:
return Doing;
case 2:
return Pause;
case 3:
return Completed;
case 4:
return Del;
case 5:
return CutShort;
default:
return null;
}
}
}
用法举例:
int index = StatusEnum.Doing.getIndex();
System.out.println("状态Doing的索引值为:" + index);
StatusEnum statusEnum = StatusEnum.getValueByIndex(2);
System.out.println("索引值为2的枚举值是:" + statusEnum);
输出为:
状态Doing的索引值为:1
索引值为2的枚举值是:Pause
构造方法有两个参数的枚举类
/**
* 星期枚举类
*
* @author Gary
* @date 2019-04-21 22:29
*/
public enum WeekDayEnum {
// 星期日
SUN(0, "星期日"),
MON(1, "星期一"),
TUE(2, "星期二"),
WED(3, "星期三"),
THU(4, "星期四"),
FRI(5, "星期五"),
SAT(6, "星期六");
private Integer index;
private String value;
WeekDayEnum(Integer index, String value) {
this.index = index;
this.value = value;
}
public Integer getIndex() {
return index;
}
public String getValue() {
return value;
}
/**
* 根据枚举名称获得value
* 比如根据“FRI”得到“星期五”
*
* @param name
* @return java.lang.String
* @author Gary
* @date 2019-04-21 22:35
*/
public static String getValueByName(String name) {
WeekDayEnum[] values = WeekDayEnum.values();
for (WeekDayEnum value : values) {
if (value.name().equals(name)) {
return value.getValue();
}
}
return null;
}
/**
* 根据属性value获取属性index:
* 比如根据 "星期三" 得到 3
*
* @param value
* @return Integer
*/
public static Integer getIndexByValue(String value) {
for (WeekDayEnum weekDayEnum : WeekDayEnum.values()) {
String v = weekDayEnum.getValue();
if (v.equals(value)) {
return weekDayEnum.getIndex();
}
}
return null;
}
/**
* 根据属性index获取属性value
* 比如根据 3 得到 "星期三"
*
* @param index
* @return
*/
public static String getValueByIndex(Integer index) {
for (WeekDayEnum weekDayEnum : WeekDayEnum.values()) {
Integer in = weekDayEnum.getIndex();
if (in.equals(index)) {
return weekDayEnum.getValue();
}
}
return null;
}
/**
* 根据属性index获取对应的枚举值:
* 比如根据 3 得到枚举值 WED
*
* @param index
* @return
*/
public static WeekDayEnum getNameByIndex(Integer index) {
for (WeekDayEnum weekDayEnum : WeekDayEnum.values()) {
if (weekDayEnum.getIndex().equals(index)) {
return weekDayEnum;
}
}
return null;
}
/**
* 返回一个由index和value组成的map集合:
* {0=星期日, 1=星期一, 2=星期二, 3=星期三, 4=星期四, 5=星期五, 6=星期六}
*
* @return
*/
public static Map<Integer, String> getIndexValueMap() {
Map<Integer, String> map = new HashMap<>();
for (WeekDayEnum weekDayEnum : WeekDayEnum.values()) {
Integer index = weekDayEnum.getIndex();
String value = weekDayEnum.getValue();
map.put(index, value);
}
return map;
}
}
用法举例:
Integer i = WeekDayEnum.MON.getIndex();
System.out.println("MON的索引值为:" + i);
Integer ii = WeekDayEnum.getIndexByValue("星期日");
System.out.println("星期日的索引值为:" + ii);
String value = WeekDayEnum.getValueByName("FRI");
System.out.println("FRI的value为:" + value);
String v = WeekDayEnum.getValueByIndex(4);
System.out.println("索引值为4的value为:" + v);
Map<Integer, String> map = WeekDayEnum.getIndexValueMap();
System.out.println(map);
输出为:
MON的索引值为:1
星期日的索引值为:0
FRI的value为:星期五
索引值为4的value为:星期四
{0=星期日, 1=星期一, 2=星期二, 3=星期三, 4=星期四, 5=星期五, 6=星期六}
注意:枚举类的构造方法必须是private修饰,如果不加默认为private。