gpt4 book ai didi

java - 如何初始化基于 Java 枚举的 Singleton?

转载 作者:太空狗 更新时间:2023-10-29 22:49:14 25 4
gpt4 key购买 nike

如果我必须在使用该对象之前对其进行初始化,那么初始化基于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com