• java----枚举


     枚举:

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

    每一个枚举元素都是一个对象

    基本使用

    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 static final来修饰枚举

    public class Demo{
        public static void main(String[] args) {
            //通过SINGLETON对象调用method方法;
            EnumSingleton instance = EnumSingleton.INSTANCE.getInstance();
            EnumSingleton instance1 = EnumSingleton.INSTANCE.getInstance();
            System.out.println(instance==instance1);
        }
    }
    enum  EnumSingleton {
        INSTANCE;
        public EnumSingleton getInstance(){
            return INSTANCE;
        }
    }

    枚举用途

    public interface ResultCode {
        //操作是否成功,true为成功,false操作失败
        boolean success();
        //操作代码
        int code();
        //提示信息
        String message();
    }
    
    @ToString
    public enum CommonCode implements ResultCode{
        SUCCESS(true,10000,"操作成功!"),
        FAIL(false,11111,"操作失败!"),
        UNAUTHENTICATED(false,10001,"此操作需要登陆系统!"),
        UNAUTHORISE(false,10002,"权限不足,无权操作!"),
        SERVER_ERROR(false,99999,"抱歉,系统繁忙,请稍后重试!");
        //private static ImmutableMap<Integer, CommonCode> codes ;
        //操作是否成功
        boolean success;
        //操作代码
        int code;
        //提示信息
        String message;
        
        private CommonCode(boolean success,int code, String message){
            this.success = success;
            this.code = code;
            this.message = message;
        }
    
        @Override
        public boolean success() {
            return success;
        }
        @Override
        public int code() {
            return code;
        }
    
        @Override
        public String message() {
            return message;
        }
    }

    枚举优点?

    可以避免反射攻击

    参考:https://www.cnblogs.com/chiclee/p/9097772.html

      

     

  • 相关阅读:
    索引唯一性扫描(INDEX UNIQUE SCAN)
    索引范围扫描(INDEX RANGE SCAN)
    算法设计与分析——回溯法算法模板
    操作系统考试复习大纲
    windows cmd 生成文件目录树
    Java 匿名类和lambda表达式
    下载Abook 高等教育出版社网站资料
    操作系统——银行家算法(Banker's Algorithm)
    算法设计与分析——最大团问题(回溯法)
    JVM内存区域
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10761111.html
Copyright © 2020-2023  润新知