枚举:

枚举这种类型占用内存空间大,根据需要选择枚举或者常量

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

基本使用

class  ColorTest{
    //如果使用枚举,不需要再本类中定义...即使定义了,也用不到
//    private int red;
//    private int blue;
//    private int black;
//    private int color;
    private Color colorenum;
//    public void test(){
//        color = red;
//        color = 1;
//    }
    //从编码的角度(编译期),限制了colorenum的选择范围;
    public void test2(){
        //如果希望color强制只能为red,blue,black中的一种;不能是color = 1;
        colorenum = Color.red;
        //colorenum = 1;  此时会报错,编辑期不给通过

        System.out.println(colorenum);  //red
        System.out.println(colorenum.name()); //red
        System.out.println(colorenum.ordinal()); //2,枚举的序号;
        System.out.println(colorenum.toString());//red

        for (Color s:Color.values()) {
            System.out.println(s);
        }
    }
    public void test3(){
        //存放枚举的集合
        EnumSet<Color> colors = EnumSet.allOf(Color.class);
        for (Color c:colors){
            System.out.println(c);
        }
    }
    public void test4() {
        EnumMap<Color,String> map = new EnumMap<Color, String>(Color.class);
        map.put(Color.red,"111");
        map.put(Color.blue,"222");
        for (Color c:map.keySet()){
            System.out.println(c);
        }
    }
}

 

枚举构造方法

public class Demo{
    public static void main(String[] args) {
        ColorTest colorTest = new ColorTest();
        colorTest.test();
    }
}
enum Color {
    blue,black(10),red;
    //可以定义属性
    private int color;
    //只能定义私有的构造方法
    private Color(){
        System.out.println("无参构造器");
    }
    private Color(int color){
        this.color = color;
        System.out.println("有参构造器");
    }
}
class  ColorTest{
    private Color colorenum;
    public void test(){
        //用到枚举类型Color,所有的构造方法都会被调用
        colorenum = Color.red;
    }
}

 

让枚举实现接口 

Color.red  是一个对象,对象可以调用方法;

public class  Demo{
    public static void main(String[] args) {
        ColorTest colorTest = new ColorTest();
        colorTest.test();
    }
}
interface info{
    int getColor();
}
enum Color implements info{
    blue,black(10),red;
    //可以定义属性
    private int color;
    //只能定义私有的构造方法
    private Color(){
        System.out.println("无参构造器");
    }
    private Color(int color){
        this.color = color;
        System.out.println("有参构造器");
    }
    @Override
    public int getColor() {
        return this.color;
    }
}
class  ColorTest{
    private Color colorenum;
    public void test(){
        int num = Color.red.getColor();
        System.out.println(num);
        int num2 = Color.black.getColor();
        System.out.println(num2);
    }
}

 

 

再枚举中定义抽象方法

public class Demo{
    public static void main(String[] args) {
        ColorTest colorTest = new ColorTest();
        colorTest.test();
    }
}
enum Color {
    blue {
        @Override
        public String getColorName() {
            return "blue";
        }
    },black() {
        @Override
        public String getColorName() {
            return "black";
        }
    },red {
        @Override
        public String getColorName() {
            return "red";
        }
    };
    public abstract String getColorName();
}
class  ColorTest{
    public void test(){
        String name = Color.red.getColorName();
        System.out.println(name);
    }
}

  

枚举实现单例模式

public class Demo{
    public static void main(String[] args) {
        //通过SINGLETON对象调用method方法;
        Color.SINGLETON.method();
    }
}
enum Color {
    SINGLETON;
    public void method(){
        System.out.println("单例模式");
    }
}

  

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄