【问题标题】:declaring instance keyword in java在java中声明实例关键字
【发布时间】:2026-02-09 08:20:08
【问题描述】:

我看到在我的 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;
    } 
} 

【问题讨论】:

  • 我在任何地方都没有看到实例。关键字也是instanceof
  • 那不是关键字,是常数。

标签: java


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这个回应值得第一!
【解决方案2】:

这不是关键字。这是一个枚举常量,应该大写。无论您在哪里学习 Java,您都应该能够发现这一点。

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

【讨论】:

    【解决方案3】:

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

    Enum 用来充当固定数量常量的类型:

    例如。

    public enum TodoDao {
        INSTANCE
    };
    

    INSTANCE 是 TodoDao 类的 public static final 字段,和所有静态字段一样,它们可以通过类名访问

    TodoDao b1 = TodoDao.INSTANCE;

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

    阅读更多:What's the use of "enum" in Java?

    【讨论】: