• Java基础(六)--枚举Enum


    枚举:

      刚开始项目中没怎么用过,只知道能够实现作为项目中类似定义Constant的功能,然后知道枚举实现的单例模式几乎是最优雅的。所以,

    想要系统完整的了解一下Enum。

    1、基本特性:

    Enum.values()可以遍历enum实例。返回的是enum实例的数组

    public enum EnumDemo {
        jesen,
        kobe,
        gakki
    }
    public static void main(String[] args) {
            for (EnumDemo demo : EnumDemo.values()) {
                System.out.println(demo);
            }
        }

    2、向enum中添加新方法

    public enum Status {
            SUCCESS(200, "SUCCESS"),
            BAD_REQUEST(400, "Bad Request"),
            NOT_FOUND(404, "Not Found"),
            INTERNAL_SERVER_ERROR(500, "Unkown Internal Error"),
            NOT_VALID_PARAM(40005, "Not valid Params"),
            NOT_SUPPORTED_OPERATION(40006, "Operation not supported"),
            NOT_LOGIN(50000, "Not Login");
    
            private int code;
            private String message;
    
            Status(int code, String message) {
                this.code = code;
                this.message = message;
            }
    
            public void setCode(int code) {
                this.code = code;
            }
    
            public void setMessage(String message) {
                this.message = message;
            }
    
            public int getCode() {
                return code;
            }
    
            public String getMessage() {
                return message;
            }
        }
    使用:Status.SUCCESS.getCode()

     类似这样去使用,上面的例子:可以应用到Response返回状态的定义

    3、switch语句中的enum

    public static void main(String[] args) {
            EnumDemo code = EnumDemo.jesen;
            switch (code) {
                case jesen:
                    System.out.println("jesen");
                    break;
                case kobe:
                    System.out.println("kobe");
                    break;
                case gakki:
                    System.out.println("gakki");
                    break;
            }
        }

    一般来说switch中只能使用整数值,而enum具有整数值的次序,这样显得很简洁

    4、常量相关的方法

    允许为enum实例编写方法

    public enum  ConstantSpec {
    
        DATA_TIME {
            String getInfo() {
                return "DATA_TIME";
            }
        },
    
        CLASS_PATH {
            String getInfo() {
                return "CLASS_PATH";
            }
        }
    }

    5、优雅的实现单例

    public class SingletonExample {
    
        // 私有构造函数
        private SingletonExample() {
    
        }
    
        public static SingletonExample getInstance() {
            return Singleton.INSTANCE.getInstance();
        }
    
        private enum Singleton {
            INSTANCE;
    
            private SingletonExample singleton;
    
            // JVM保证这个方法绝对只调用一次
            Singleton() {
                singleton = new SingletonExample();
            }
    
            public SingletonExample getInstance() {
                return singleton;
            }
        }
    }

    优点:

      1、解决线程安全问题。enum天生不存在并发安全问题

      2、避免反序列化破坏单例。枚举的反序列化并不通过反射实现。

  • 相关阅读:
    js 匿名函数的链式调用
    mysql 数据库操作的一般操作命令
    js 截取一定数量的字节
    js 截取10个字节
    BootStrap入门教程 (四)
    安装Dedecms遇到的一系列问题
    BootStrap入门教程 (三)
    dedecms标签调用大全
    artDialog皮肤引入方式
    织梦cms安装完成后登录后台出现空白。主要原因是php版本的问题
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10845853.html
Copyright © 2020-2023  润新知