3

我使用枚举方法实现了一个 Singleton:

public enum Singleton {
    INSTANCE;

    public void doStuff(String stuff) {
        System.out.println("Doing " + stuff);
    }
}

我怎么称呼它是正确的(我不是说执行,只是怎么)?它仍然是一个类还是现在是一个枚举?我只对理论部分感兴趣。
如果谈论面向对象和类,我可以说我创建了一个枚举类型的单例类吗?

4

6 回答 6

3

Java 中的枚举只是一个类(您似乎知道),因此您应该可以将其称为上述任何一种。这有点主观,但我认为这取决于你想强调它的哪些方面。

  • 如果你想强调这个东西可以用状态和方法实例化一个对象,把它称为一个类
  • 如果要突出显示对象本身,请将其称为单例实例
  • 如果您想强调它使用枚举来实现单例模式,请将其称为枚举
  • 如果您想强调它是单例的事实(不提及该模式的实现方式),请将其称为单例
  • 如果您想强调它是通过枚举实现的单例模式这一事实,请将其称为单例枚举

我会理解这些术语中的任何一个,并且我不会判断某人使用一个与另一个。

于 2012-05-10T05:14:36.730 回答
2

它是一个枚举,也是一个类。枚举是一种类。

于 2012-05-10T05:12:51.113 回答
0

在这种情况下,您创建了一个单例对象 INSTANCE,它是一个枚举(在本例中为 INSTANCE)。jvm 确保仅存在一个枚举实例;因此默认情况下它们可以被视为单例。您可以在此处找到更多详细信息

于 2012-05-10T05:13:44.093 回答
0

这是一个枚举。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 或更高版本)

于 2012-05-10T05:14:24.393 回答
0
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. 
于 2012-05-10T05:15:48.343 回答
0

它是Enum,也是Java5.0以来的一种类。

您正在使用枚举创建单例。

了解有关枚举的更多信息

于 2012-05-10T05:22:58.600 回答