枚举

1、java枚举是从jdk5开始引入的

2、简单枚举类型定义

package com.ly.demo.jdk13;


/**
 * @author liuyang
 * @create 2020-04-29 23:24
 */
public enum ColorEnum {
    // 枚举类型内还有定义其它方法时,最后一个枚举实例后面要以;结尾
    RED, GREEN, YELLOW;

    public static void main(String[] args) {
        // 获得枚举实例数组
        ColorEnum[] colors = ColorEnum.values();
        for (ColorEnum color : colors) {
            System.out.println("枚举实例名:" + color.name());
            System.out.println("枚举实例顺序从0开始:" + color.ordinal());
        }
    }
}

3、定有有其它方法的枚举类型,枚举类型可以添加普通方法、静态方法、抽象方法、构造方法

package com.ly.demo.jdk13;

/**
 * @author liuyang
 * @create 2020-04-29 23:34
 */
public enum ErrorCodeEnum {
    // 格式需要与构造方法保持一致
    // A和B调用的有参构造器
    // C调用的无参构造器,ERROR_C()可直接简写为ERROR_C
    ERROR_A("错误A", "A"),
    ERROR_B("错误B", "B"),
    ERROR_C();

    private String msg;
    private String code;

    ErrorCodeEnum() {
    }

    //枚举类型的构造器只能声明为private或者不修饰
    ErrorCodeEnum(String msg, String code) {
        this.msg = msg;
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public static void main(String[] args) {
        ErrorCodeEnum[] arr = ErrorCodeEnum.values();
        for (ErrorCodeEnum item : arr) {
            System.out.println("msg:" + item.getMsg() + ",code:" + item.getCode());
        }
    }
}

4、枚举类实现接口

package demo;

/**
 * @description: demo22
 * @author: liuyang
 * @create: 2021-08-31 9:23
 */
public class Demo22 {
    public static void main(String[] args) {
        for (int i = 0; i < OrderStatus.values().length; i++) {
            System.out.println(OrderStatus.values()[i].getValue());
            System.out.println(OrderStatus.values()[i].getDesc());
            OrderStatus.values()[i].show();
        }
    }
}

interface Test {
    void show();
}

/**
 * 枚举类也可以实现接口
 * 我们可以选择在枚举类中实现接口的方法,
 * 也可以在具体的枚举实例中重写接口的方法,
 * 枚举实例中重写的方法优先级高于枚举类中重写的方法
 */
enum OrderStatus implements Test {
    DOWNLOAD_SUCCESS(100,"下载成功") {
        @Override
        public void show() {
            System.out.println("我是下载成功");
        }
    },
    DOWNLOAD_FAIL(200,"下载失败") {
        @Override
        public void show() {
            System.out.println("我是下载失败");
        }
    },
    DOWNLOAD_ERROR(300,"下载异常") {
        @Override
        public void show() {
            System.out.println("我是下载异常");
        }
    };

    private int value;
    private String desc;

    private OrderStatus(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    public int getValue() {
        return value;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public void show() {
        System.out.println("hello");
    }
}

 

posted @ 2020-04-29 23:53  牛牛的自留地  阅读(146)  评论(0编辑  收藏  举报