gpt4 book ai didi

java - 在java中以正确的方式声明单例,并正确初始化私有(private)哈希表

转载 作者:行者123 更新时间:2023-12-02 00:33:42 24 4
gpt4 key购买 nike

我需要一些关于如何在单例中初始化此哈希的指导。

因此,根据 effective java 的作者的说法,您可以使用枚举来声明单例:https://sites.google.com/site/io/effective-java-reloaded/effective_java_reloaded.pdf?attredirects=0

所以到目前为止我有这个:

public enum MySingleton {
INSTANCE;

private final Hashtable<SomeEnumType, UserSettings> settings;

public final UserSettings getSettings(SomeEnumType enumType) {
return settings.get(enumType);
}

}

所以我认为我的单例是正确的,我需要有关如何初始化内联设置哈希表的帮助。

private final Hashtable<SomeEnumType, UserSettings> settings = new Hashtable<SomeEnumType, UserSettings>() {{
put(SomeEnumType.Blah1, new UserSettings ??????? );
}};

假设我的 UserSettings 有一些字段,我可以将它们设置为内联吗?对单例有什么意见可以吗?

注意:初始化后我根本不会更新这个哈希值。

最佳答案

由于您没有更新Hashtable,因此不需要同步,因此我会使用HashMap。您有 2 个选项来初始化 map 。

1) 在枚举构造函数中

public enum MySingleton {
INSTANCE;

private final HashMap<SomeEnumType, UserSettings> settings;

private MySingleton(){
settings = new HashMap<SomeEnumType, UserSettings>();
settings.put(...,...);
}

public final UserSettings getSettings(SomeEnumType enumType) {
return settings.get(enumType);
}

}

2) 在初始化 block 中

public enum MySingleton {
INSTANCE;

private final HashMap<SomeEnumType, UserSettings> settings;
{
settings = new HashMap<SomeEnumType, UserSettings>();
settings.put(...,...);
}

public final UserSettings getSettings(SomeEnumType enumType) {
return settings.get(enumType);
}

}

关于java - 在java中以正确的方式声明单例,并正确初始化私有(private)哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8380212/

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