Java枚举支持方法?但不是在c#?

cod*_*ing 5 c# java enumeration

我正在研究在java中执行单例的正确方法的代码:在Java中实现单例模式的有效方法是什么?

我有点困惑,你如何在枚举中添加一个方法?

 public enum Elvis {
       INSTANCE;
       private final String[] favoriteSongs =
           { "Hound Dog", "Heartbreak Hotel" };
       public void printFavorites() {
           System.out.println(Arrays.toString(favoriteSongs));
       }
   }
Run Code Online (Sandbox Code Playgroud)

上面代码中的枚举对我来说甚至没有意义,你有符号:

INSTANCE;
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

我来自c#,这种语法让我很好奇,我希望有人可以解释或理解上述内容.

我想这意味着java有一个更纯粹的枚举概念,因为它可以有行为?

G_H*_*G_H 13

Java中的枚举实际上是一个类.一个隐式扩展java.lang.Enum.您看到的特殊语法INSTANCE;是枚举常量的声明.这将用于创建一个可以在代码中引用的枚举类的实例.事实上,你甚至可以为你的枚举设置一个非默认的构造函数,并在常量声明中使用它.例:

public enum Test {

    INSTANCE("testing");

    private final String content;
    public Test(final String content) {
        super();
        this.content = content;
    }

}
Run Code Online (Sandbox Code Playgroud)

将枚举作为真实对象处理具有一定的优势.将一些逻辑放入枚举很方便,但也不应该被滥用.不过,在我看来,通过枚举的单例模式是一个很好的解决方案.

  • 那是一个很好的干净答案.简而言之,将Java枚举类型视为常规类,它可以包含字段,构造函数和方法,但它们只是带有一组预定义的实例. (2认同)