在java中声明实例关键字

时间:2013-12-29 15:25:32

标签: java

我在ENUM的java代码声明中看到了一个“instance”关键字。有人解释了这个关键字是如何工作的吗?

Java代码: -

public enum TodoDao {
    instance;

    private Map<String, Todo> contentProvider = new HashMap<String, Todo>();

    private TodoDao() {
        Todo todo = new Todo("1", "Learn REST");
        todo.setDescription("Read http://www.vogella.com/articles/REST/article.html");
        contentProvider.put("1", todo);
        todo = new Todo("2", "Do something");
        todo.setDescription("Read complete http://www.vogella.com");
        contentProvider.put("2", todo);
    }
    public Map<String, Todo> getModel(){
        return contentProvider;
    } 
} 

3 个答案:

答案 0 :(得分:9)

根据Joshua Bloch的说法,这是实施GoF单身人士模式的最佳方式,请参阅相关问题: What is an efficient way to implement a singleton pattern in Java?

根据java风格指南,它应该是全部大写,即INSTANCE

要使用此功能,您可以从代码的任何部分调用以下内容:

Map<String, Todo> todos = TodoDao.INSTANCE.getModel();

您可以确定初始化只会发生一次。

答案 1 :(得分:3)

这不是关键字。它是一个枚举常量,应该是大写的。无论你在哪里学习Java,你都应该能够找到。

拥有像这样的可变静态实际上是一个非常糟糕的主意。返回一个可变的内部对象也很糟糕。

答案 2 :(得分:1)

如果您事先知道实例数,则假设您使用enum而不是类。

枚举用作一种固定数量的常量:

例如

public enum TodoDao {
    INSTANCE
};

INSTANCE是TodoDao类的公共静态最终字段,与所有静态字段一样,它们可以通过类名访问,如

  

TodoDao b1 = TodoDao.INSTANCE;

这里INSTANCE是最终的静态内部类。

了解详情:What's the use of "enum" in Java?