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

标签 c# java enumeration

我正在查看这段在 Java 中执行单例的正确方法的代码:What is an efficient way to implement a singleton pattern in Java?

我有点疑惑,如何向枚举添加方法?

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

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

INSTANCE;

那条线怎么是正确的?

我来自 C#,这种语法让我很好奇,我希望有人能解释或理解上面的内容。

我猜这意味着 java 对枚举有更纯粹的想法,因为它可以有行为?

最佳答案

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

public enum Test {

    INSTANCE("testing");

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

}

将枚举视为真正的对象具有某些优势。将一些逻辑放入枚举中很方便,但也不应被滥用。不过,在我看来,通过枚举实现的单例模式是一个不错的解决方案。

关于c# - Java枚举支持方法?但不是在 C# 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935117/

相关文章:

c# - 更改特定行的颜色 (TELERIK)

javascript - 我的 json 对象在到达我的 Controller 函数时变为 null

java - Infinispan Hibernate 搜索 :org. hibernate.hql.ParsingException: HQLLUCN000003

objective-c - Objective C——枚举数组最快最有效的方法是什么?

C++ - enum vs. const vs. #define

c# - Visual Studio : How to "Copy to Output Directory" without copying the folder structure?

java - Android Java - OnCreate 中的竞争条件,带有两个观察者并制作列表

java - NetBeans Matisse 中的表单加载错误

linq - 更正 LINQ to SharePoint 查询中的多选值

c# - 有没有办法在 Razor (MVC3) View 中执行 `extern alias`?