代码之家  ›  专栏  ›  技术社区  ›  Miles D

在Java中使用枚举作为单例的最佳方法是什么?

  •  84
  • Miles D  · 技术社区  · 16 年前

    在有问题的文章基础上 Best Singleton Implementation In Java -也就是说,关于使用枚举创建一个单例-它们之间的区别/优点/缺点是什么(构造函数省略)

    public enum Elvis {
        INSTANCE;
        private int age;
    
        public int getAge() {
            return age;
        }
    }
    

    Elvis.INSTANCE.getAge()

    public enum Elvis {
        INSTANCE;
        private int age;
    
        public static int getAge() {
            return INSTANCE.age;
        }
    }
    

    然后打电话 Elvis.getAge()

    4 回复  |  直到 8 年前
        1
  •  96
  •   Jon Skeet    16 年前

    一个例子。如果静态方法适合您,那么只需使用这些方法,而不用担心枚举。

        2
  •  69
  •   Nicolas    16 年前

    当您的单例必须实现一个接口时,这是一个很大的优势。以你为例:

    public enum Elvis implements HasAge {
        INSTANCE;
        private int age;
    
        @Override
        public int getAge() {
            return age;
        }
    }
    

    public interface HasAge {
        public int getAge();
    }
    

    这不能用静力学来完成。。。

        3
  •  9
  •   Tom Hawtin - tackline    16 年前

        4
  •  8
  •   Peter Lawrey    15 年前

    我会选择最简单、最清晰的选项。这有点主观,但如果你不知道什么是最清晰的,就选择最短的选项。