java 枚举

如果某“数据集”的元素是稳定的而且个数是有限的(如东南西北、周一到周日、春夏秋冬)可以使用枚举类,个人理解枚举类是预初始化了指定实例的java类,枚举列有很多有趣的用法,伴随EnumSet(高性能Set)和EnumMap(高性能Map)的加入,枚举类变得越来越有意思,如果我们有Set集合或Map集合key有了枚举类的特征(稳定、数目限定等)可以考虑代替HashMap和HashSet加入应用场景。


普通使用方式:

enum MsgDriveType {
    WS("WS") {
        @Override
        public void detail() {
            System.out.println("I am WS ...");
        }
        @Override
        public void show() {
            System.out.println("Myself show WS ...");
        }
    },
    OF("OF") {
        @Override
        public void detail() {
            System.out.println("I am OF ...");
        }
    },
    JMS("JMS") {
        @Override
        public void detail() {
            System.out.println("I am JMS ...");
        }
    },
    DEFAULT {
        @Override
        public void detail() {
            System.out.println("I am DEFAULT ...");
        }
    };
    private String info;
    // 有参构造
    private MsgDriveType(String info) {
        setInfo(info);
    }
    // 无参构造
    private MsgDriveType() {
        setInfo("DEFAULT");
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public String getInfo() {
        return info;
    }
    public abstract void detail();
    public void show() {
        System.out.println("No Override, so show DEFAULT ...");
    }
}
public class Test {
    public static void main(String[] args) {
        MsgDriveType[] li = MsgDriveType.values();
        for (int i = 0; i < li.length; i++) {
//            li[i].setInfo(li[i].getInfo() + "  @_@");
//            System.out.println(li[i].getInfo());

//            li[i].detail();

//            li[i].show();

            System.out.println(li[i].ordinal() + "\t" + li[i].name() + "\t" + li[i].toString());
        }
    }
}


枚举实现接口:

//枚举的接口组织形式
interface Food {
    void showSelf();//接口抽象方法

    //接口自己的内部类 实现了此 接口
    class a implements Food {
        @Override
        public void showSelf() {
            System.out.println("aaaaaaa");
        }
    }
    // 接口内部的 枚举类 实现了此 接口
    enum Coffee implements Food {
        BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO;//即使枚举没有实例,这里的分号也是必须的(如果后面有属性或方法的话)
        @Override
        public void showSelf() {
            System.out.println("枚举公共实现:" + this.name());//Enum.name()
        }
    }
    // 接口实现 枚举 实例具体实现
    enum Dessert implements Food {
        FRUIT {
            @Override
            public void showSelf() {
                System.out.println("FRUIT");
            }
        }, CAKE {
            @Override
            public void showSelf() {
                System.out.println("CAKE");
            }
        }, GELATO {
//            注释后使用默认实现
//            @Override
//            public void showSelf() {
//                System.out.println("GELATO");
//            }
        };

        //默认实现
        @Override
        public void showSelf() {
            System.out.println("Default");
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Food food = new Food.a();
        food = Food.Coffee.BLACK_COFFEE;
        food = Food.Coffee.DECAF_COFFEE;
        food = Food.Coffee.LATTE;
        food = Food.Coffee.CAPPUCCINO;
        food = Food.Dessert.FRUIT;
        food = Food.Dessert.CAKE;
        food = Food.Dessert.GELATO;
        food.showSelf();
    }
}

枚举列有很多有趣的用法,伴随EnumSet(高性能Set)和EnumMap(高性能Map)的加入,枚举类变得越来越有意思

你可能感兴趣的:(java 枚举)