在Java中使用Enum作为单例最好的方法是什么?

build立在这个问题上写的最好的单例实现在Java中 – 即关于使用枚举来创build一个单例 – 什么是差异/优点/缺点之间(构造函数省略)

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()

假设你绑定的东西将使用它给定的任何对象的属性 – 你可以非常容易地传递Elvis.INSTANCE,但是你不能传递Elvis.class并期望它find属性(除非它被刻意地编码来查找类的静态属性)。

基本上你只需要使用单例模式,当你想要一个实例。 如果静态方法可以为你工作,那么就使用这些,不要打扰与枚举。

一个很大的好处是当你的单例必须实现一个接口。 遵循你的例子:

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

附:

 public interface HasAge { public int getAge(); } 

静力学无法完成…

(有状态的)单例通常被用来假装不使用静态variables。 如果你实际上没有使用公开的静态variables,那么你将会愚弄更less的人。

我会select最简单和最清晰的选项。 这是有些主观的,但是如果你不知道什么是最清楚的,那就select最短的选项。