我使用枚举方法实现了一个 Singleton:
public enum Singleton {
INSTANCE;
public void doStuff(String stuff) {
System.out.println("Doing " + stuff);
}
}
我怎么称呼它是正确的(我不是说执行,只是怎么写)?它仍然是一个类还是现在是一个枚举?我只对理论部分感兴趣。
如果谈论面向对象和类,我可以说我创建了一个枚举类型的单例类吗?
Java 中的枚举只是一个类(您似乎知道),因此您应该可以将其称为上述任何一种。这有点主观,但我认为这取决于你想强调它的哪些方面。
我会理解这些术语中的任何一个,并且我不会判断某人使用一个与另一个。
它是一个枚举,也是一个类。枚举是一种类。
在这种情况下,您创建了一个单例对象 INSTANCE,它是一个枚举(在本例中为 INSTANCE)。jvm 确保仅存在一个枚举实例;因此默认情况下它们可以被视为单例。您可以在此处找到更多详细信息
这是一个枚举。Java 语言确保 INSTANCE 枚举值将被实例化一次(每个类加载器,因此通常每个 JVM 一次),并且 Singleton.INSTANCE 字段将允许您访问单个实例。
你也可以这样做:
public class Singleton {
public static Singleton instance INSTANCE = new Singleton();
private Singleton() { /* private ctor so people can't instantiate their own */ }
}
但是枚举方法使它更干净(如果你有 JDK5 或更高版本)
Java programming language enum types are much more powerful than their
counterparts in other languages. The enum declaration defines a class
(called an enum type).
The enum class body can include methods and other fields. The compiler
automatically adds some special methods when it creates an enum.