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、避免反序列化破坏单例。枚举的反序列化并不通过反射实现。

原文地址:https://www.cnblogs.com/huigelaile/p/10845853.html