枚举:
刚开始项目中没怎么用过,只知道能够实现作为项目中类似定义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、避免反序列化破坏单例。枚举的反序列化并不通过反射实现。