这可能是一个不好的做法,但是我无法为我的问题找到更好的解决方案。所以我有这张 map
// Map<state, Map<transition, Map<property, value>>>
private Map<String, Map<String, Map<String, String>>> properties;
我想初始化它,这样我就不会得到
NullPointerException
properties.get("a").get("b").get("c");
我尝试了这个,但是我没有工作(很明显)
properties = new HashMap<String, Map<String, Map<String,String>>>();
我尝试过的其他东西没有编译。
另外,如果您对如何避免使用此嵌套 map 有任何想法,我将不胜感激。
最佳答案
您需要将 map 放在 map 中。字面上地:
properties = new HashMap<String, Map<String, Map<String,String>>>();
properties.put("a", new HashMap<String, Map<String,String>>());
properites.get("a").put("b", new HashMap<String,String>());
如果您的目标是没有
NPE
的延迟初始化,则必须创建自己的 map :private static abstract class MyMap<K, V> extends HashMap<K, V> {
@Override
public V get(Object key) {
V val = super.get(key);
if (val == null && key instanceof K) {
put((K)key, val = create());
}
return val;
}
protected abstract V create();
}
public void initialize() {
properties = new MyMap<String, Map<String, Map<String, String>>>() {
@Override
protected Map<String, Map<String, String>> create() {
return new MyMap<String, Map<String, String>>() {
@Override
protected Map<String, String> create() {
return new HashMap<String, String>();
}
};
}
};
}
关于java - 如何适本地延迟初始化Map of Map的Map?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9063641/