用POJO反演控制和依赖注入

时间:2016-12-24 07:18:14

标签: java dependency-injection enums inversion-of-control

有些人使用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如果有任何请与我分享...谢谢

1 个答案:

答案 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了解安全创建单身人士的其他方法。