目录
枚举类型是一种特殊的数据类型,它允许变量是一组预定义的常量。变量必须等于其预定义的值之一。
在生活中有很多关于枚举的例子,例如表示星期的 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 | 返回对应于此枚举常量的Class对象 |
| T valueOf(Class | 返回指定名称枚举 |
enum 枚举名称 {}
常用方法使用。
-
- 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;
- }
-
- }
- }
开发使用。
-
- 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;
- }
-
- }
枚举实现接口示例。
- /**
- * 枚举实现接口
- */
- 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();
- }