zoukankan      html  css  js  c++  java
  • 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、避免反序列化破坏单例。枚举的反序列化并不通过反射实现。

  • 相关阅读:
    单链表的算法
    顺序表的算法
    程序员的内功——数据结构和算法系列
    查找一 线性表的查找

    排序算法系列
    排序三 直接插入排序
    排序八 基数排序
    Linux编程 9 (shell类型,shell父子关系,子shell用法)
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志
  • 原文地址:https://www.cnblogs.com/huigelaile/p/10845853.html
Copyright © 2011-2022 走看看