有些人使用Enum而不是类来创建对象并将其注入代码。 E.g
public enum EnumSample {
INSTANCE;
private String name = "Sample Enum";
private String version = "1";
public String getName() {
return this.name;
}
public String getVersion() {
return this.version;
}
}
在课堂上:
public class MyClass {
public static void main(String[] args) {
new App();
}
}
public class App {
private EnumSample enumSample = EnumSample.INSTANCE;
public App() {
System.out.printf("%s - %s",enumSample.getName(), enumSample.getVersion());
}
}
这是正确的吗?因为在Oracle网站的Java文档中他们说:
来自Java documents -
只要需要表示一组固定的常量,就应该使用枚举类型。这包括自然枚举类型,例如太阳系中的行星和数据集,您可以在编译时知道所有可能的值 - 例如,菜单上的选项,命令行标志等。
我只是想知道这种方式是否正确,是否有更好的模式?请考虑这个版本只是一个例子...
我知道Enum对Singelton来说是正确的...我只是想找到其他方法来做这些没有Enum如果有任何请与我分享...谢谢
答案 0 :(得分:1)
Java中enum
实际上有两个主要用例:
(1)定义一组固定的常量,直接在Java doc。
中提到(2)enum
也可以用于安全地(线程)为类创建单例实例(即,没有明确使用synchronize
等等。)。您可以在此主题上提及here。
在EnumSample
中,您实际上只创建EnumSample
中的一个且只能使用变量INSTANCE
引用的对象(上面的用例2)。
我认为Enum对于Singelton来说是正确的。我只是想找到 没有Enum的其他方法。
在Java中,有几种方法可以以线程安全的方式创建单例实例,其中一种方法如下所示,使用static
final
INSTANCE
和{{1构造函数:
private
您可以参考here了解安全创建单身人士的其他方法。