繁体   English   中英

枚举或类?

[英]Enumeration or Class?

我使用枚举方法实现Singleton:

public enum Singleton {
    INSTANCE;

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

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

Java中的枚举只是一个类(你似乎知道),所以你应该好好调用它上面的任何一个。 这有点主观,但我认为这取决于你想突出它的哪些方面。

  • 如果你想强调一下,可以用状态和方法实例化一个对象,可以把它称为一个类
  • 如果要突出显示对象本身,请将其称为单例实例
  • 如果你想强调它正在使用枚举来实现单例模式,请将其称为枚举
  • 如果你想突出它是一个单身的事实(没有参考如何实现该模式),称之为单身人士
  • 如果你想强调它是通过枚举实现的单例模式这一事实,可以将其称为单例枚举

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

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

在这种情况下,您创建了一个单例对象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 */ }
}

但是enum方法使它更清晰(如果你有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. 

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

您正在使用Enum创建Singleton。

了解有关Enum的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM