1. 枚举类的特点

  • 枚举类型是一种特殊的类,它允许你定义一组命名的常量。这些常量通常是不可变的,并且在编译时就确定了。

  • 枚举类通过 enum 关键字来定义。每个枚举实例都是该枚举类型的对象,并且这些实例是固定的,不能动态创建。

2. 代码例子

  • 枚举的构造方法是私有化的,天生适合单例

public enum Singleton {
    INSTANCE;

    public void doSomething() {
        System.out.println("Singleton instance is doing something.");
    }
}

3. 枚举实现单例的优点

  1. 实现简单:通过枚举来实现单例只需要定义一个枚举常量,避免了复杂的同步和懒加载问题。

  2. 线程安全:JVM 保证了枚举的线程安全性,无需额外的同步控制。

  3. 防反射破坏:枚举的构造器是私有的且只能被 JVM 调用,反射无法创建新实例。

  4. 防序列化破坏:枚举类自动提供了 readResolve() 方法,该方法会在反序列化过程中返回同一个枚举实例,防止反序列化创建新对象。

  5. 避免双重检查锁定:相比双重检查锁定、静态内部类等方式,枚举实现更加简洁和优雅,避免了 volatile 和同步块的复杂性。

4. 枚举实现单例的缺点

  1. 扩展性受限

  • 如果你需要对单例的行为进行扩展,比如通过继承来增加新的功能,枚举类型就不如普通的类灵活。枚举不能被继承,也不能继承其他类。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐