使用一个枚举:
public enum Foo {
INSTANCE;
}
约书亚·布洛赫(Joshua Bloch)在Google I / O 2008上的“有效的Java重新加载”演讲中解释了这种方法:链接到视频。另请参见他的演示文稿的幻灯片30-32(effective_java_reloaded.pdf):
public enum Elvis {
INSTANCE;
private final String[] favoriteSongs =
{ "Hound Dog", "Heartbreak Hotel" };
public void printFavorites() {
System.out.println(Arrays.toString(favoriteSongs));
}
}
“该方法在功能上等同于公共领域方法,除了它更简洁,免费提供序列化机制,甚至在面对复杂的序列化或反射攻击时也提供了防止多重实例化的坚强保证。尚未被广泛采用 。”