目录
一、枚举简介
枚举类型是一种特殊的数据类型,它允许变量是一组预定义的常量。变量必须等于其预定义的值之一。
在生活中有很多关于枚举的例子,例如表示星期的 SUNDAY(星期日)、 MONDAY (星期一)、TUESDAY(星期二)、 WEDNESDAY (星期三)、THURSDAY(星期四)、 FRIDAY (星期五)、SATURDAY(星期六) 就可以定义一个枚举。
或者关于月份 JANUARY(一月)、FEBRUARY(二月) 、MARCH(三月)、APRIL(四月)、MAY(五月)、JUNE (六月)、JULY(七月)、AUGUST(八月)、SEPTEMBER(九月)、OCTOBER(十月)、NOVEMBER(十一月)、DECEMBER(十二)也可以定义一个枚举。
二、枚举作用
enum 枚举名称 {}
1、通过类型可以限制一个内容的取值范围。
2、作为类型检查,有效期检查。
3、和常量相比,编码简单明了。
需要注意的是枚举不支持继承。
三、枚举类常用方法
方法 | 描述 |
final String name() | 返回此枚举常量的名称 |
final int ordinal() | 返回此枚举常量的序号 |
Class<E> getDeclaringClass() | 返回对应于此枚举常量的Class对象 |
T valueOf(Class<T> enumType, String name) | 返回指定名称枚举 |
四、语法
enum 枚举名称 {}
五、示例
5.1 、示例1
常用方法使用。
public enum WeekEnum {
SUNDAY, // 星期日
MONDAY,// 星期一
TUESDAY,// 星期二
WEDNESDAY,// 星期三
THURSDAY,// 星期四
FRIDAY,// 星期五
SATURDAY;// 星期六
public static void main(String[] args) {
/**
* final String name() 方法
*/
System.out.println(MONDAY.name()); // SUNDAY
/**
* final int ordinal() 方法
*/
System.out.println(MONDAY.ordinal()); // 1
/**
* etDeclaringClass() 方法
*/
WeekEnum monday = WeekEnum.MONDAY;
Class clazz = WeekEnum.MONDAY.getDeclaringClass();
System.out.println(clazz); // class WeekEnum
/**
* valueOf(Class<T> enumType, String name) 方法
*/
Enum e = WeekEnum.valueOf(clazz,monday.name());
System.out.println(e); //MONDAY
/**
* switch 中使用枚举
*/
switch (WeekEnum.SUNDAY){
case SUNDAY:
System.out.println("星期日");
break;
case MONDAY:
System.out.println("星期一");
break;
case TUESDAY:
System.out.println("星期二");
break;
case WEDNESDAY:
System.out.println("星期三");
break;
case THURSDAY:
System.out.println("星期四");
break;
case FRIDAY:
System.out.println("星期五");
break;
case SATURDAY:
System.out.println("星期六");
break;
}
}
}
5.2 、示例2
开发使用。
public enum PayTypeEnum {
PAY_WX(1, "微信支付"),
PAY_ALI(2,"支付宝支付");
//枚举类型业务数据值
private int value;
//显示名称
private String displayName;
PayTypeEnum(int value, String displayName) {
this.value = value;
this.displayName = displayName;
}
/**
* 根据value获取到枚举类名称
*
* @param value
* @return
*/
public static String getNameByValue(Integer value) {
PayTypeEnum type = getByValue(value);
return null == type ? "" : type.name();
}
/**
* 根据value获取到枚举类显示名称
*
* @param value
* @return
*/
public static String getDisplayNameByValue(Integer value) {
PayTypeEnum type = getByValue(value);
return null == type ? "" : type.getDisplayName();
}
/**
* 根据value获取枚举类型
*
* @param value
* @return
*/
public static PayTypeEnum getByValue(Integer value) {
if (null != value) {
for (PayTypeEnum type : PayTypeEnum.values()) {
if (type.getValue() == value) {
return type;
}
}
}
return null;
}
/**
* 根据name获取枚举value
*
* @param name
* @return
*/
public static int getValueByName(String name) {
if (null != name && !"".equals(name.trim())) {
PayTypeEnum type = PayTypeEnum.valueOf(name);
return null == type ? 0 : type.value;
}
return 0;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
}
5.3 、示例3
枚举实现接口示例。
/**
* 枚举实现接口
*/
public enum ColorEnum implements ColorService{
RED{
@Override
public String getColor() {
return "红色";
}
},
BLUE{
@Override
public String getColor() {
return "蓝色";
}
};
/**
*
* 0 RED 红色
* 1 BLUE 蓝色
*/
public static void main(String[] args) {
for (ColorEnum c:ColorEnum.values()) {
System.out.println(c.ordinal()+" "+c.name()+" "+c.getColor());
}
}
}
/**
* 定义一个接口
*/
interface ColorService{
public String getColor();
}