如果我必须在使用该对象之前对其进行初始化,那么初始化基于 java 枚举的单例的正确方法是什么。
我已经开始编写代码了,但我不确定我是否做对了。你能帮我实现这个适合我的单例吗?
public enum BitCheck {
INSTANCE;
private static HashMap<String, String> props = null;
public synchronized void initialize(HashMap<String, String> properties) {
if(props == null) {
props = properties;
}
}
public boolean isAenabled(){
return "Y".equalsIgnoreCase(props.get("A_ENABLED"));
}
public boolean isBenabled(){
return "Y".equalsIgnoreCase(props.get("B_ENABLED"));
}
}
最佳答案
完全有可能为 enum
创建构造函数:
public enum BitCheck {
INSTANCE;
BitCheck() {
props = new HashMap<String, String>();
}
private final Map<String, String> props;
//..
}
注意:
props
字段可以是final(我们喜欢final
)props
不必是static
- 构造函数会自动为您急切地调用
注意最后一点。由于 enum
-singletons 是在加载 enum BitCheck
类时急切创建的,因此您无法将任何参数传递给构造函数。当然可以通过INSTANCE
声明:
public enum BitCheck {
INSTANCE(new HashMap<String, String>());
BitCheck(final Map<String, String> props) {
this.props = props;
}
但这没有任何区别,对吧?你想达到什么目的?也许您实际上需要延迟初始化的单例?
关于java - 如何初始化基于 Java 枚举的 Singleton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697726/