在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最短的选项。