【发布时间】:2011-12-17 14:51:45
【问题描述】:
我正在查看在 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 中设计枚举的人决定了。
-
顺便说一句,对于“向枚举添加方法”的某些解释,扩展方法可能会有所帮助
-
在我看来,您的示例就像是 C# 等效的
struct的 hackish Java 解决方法。查看您提供的链接中的页面,看起来这是为了提高内存效率。但是,您必须考虑的一件大事是可维护性。 3 年后,开发人员是会看到代码并理解,还是默默地希望世界上所有的危险都在你头上? -
@JimSchubert 该示例是在 Java 中实现单例对象的“正确”方式。在
Class上使用Enum保证只会创建一个实例,因为在Java 中,Enum是Class,因此您可以拥有所有相同的函数/变量。班级。默认情况下,C# 中的Structs 不是单例。它就像一个类一样具有可维护性,该类具有有关最终产品的适当文档,并记录了Enum的选择而不是Class。
标签: c# java enumeration