我看到在我的ENUM的java代码声明中声明了一个"instance"关键字。有人可以解释一下这个关键字是如何工作的吗?
爪哇代码:-
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;
}
}
这是实现GoF单例模式的最佳方式,根据Joshua Bloch的说法,请参阅相关问题:在 Java 中实现单例模式的有效方法是什么?
根据java风格指南,它应该是全部大写的,即 INSTANCE
.
若要使用它,可以从代码的任何部分调用以下内容:
Map<String, Todo> todos = TodoDao.INSTANCE.getModel();
而且您可以确定初始化只会发生一次。
这不是一个关键字。这是一个枚举常量,应该大写。无论你在哪里学习Java,你都应该能够找到它。
拥有这样的可变静态实际上是一个非常糟糕的主意。返回可变的内部对象也是不好的。
假设如果您事先知道实例数,则使用enum
而不是类。
枚举用作固定数量的常量类型:
例如。
public enum TodoDao {
INSTANCE
};
INSTANCE 是 TodoDao 类的公共静态最终字段,与所有静态字段一样,它们可以通过类名访问,例如
TodoDao b1 = TodoDao.INSTANCE;
这里 INSTANCE 是最终的静态内部类。
阅读更多:"enum"在Java中有什么用?