为了提高工作效率,我试图将数据保存在一个动态容器中。
我使用
在class
内初始化它
private final ConcurrentHashMap<String, Object> allInOne =
new ConcurrentHashMap<String, Object>();
allInOne.put("total", 0.0);
无错误地工作。
allInOne.put(account, new ConcurrentHashMap<String, Object>());
无错误地工作。
allInOne.get(account).put("total", 0.0);
让javac
给:
DynamicConcurrentHashMapper.java:162: error: cannot find symbol
allInOne.get(account).put("total", 0.0);
^
symbol: method put(String,double)
location: class Object
我见过How do I access nested HashMaps in Java?,我很高兴有一个解决方案,但有没有办法在没有投射的情况下做到这一点?如果没有,是否有更好的方法来模板allInOne
?
特殊情况
我同意所有这些都是严格原子性的不良做法,并向其他人推荐反对,但我正试图尽快完成工作原型。
答案 0 :(得分:2)
您需要明确地将allInOne.get(account)
转换为ConcurrentHashMap<String, Object>()
这样做。
ConcurrentHashMap<String, Object> accountMap = (ConcurrentHashMap<String, Object>)allInOne.get(account);
答案 1 :(得分:0)
你正在努力做一个非常糟糕的主意。但你可以这样做。
private final ConcurrentHashMap<String, ConcurrentHashMap<String, Object>> allInOne = new ConcurrentHashMap<String, ConcurrentHashMap<String, Object>>();
在这种情况下,下面的行将失败。
allInOne.put("total", 0.0);
但这两行编译
allInOne.put("", new ConcurrentHashMap<String, Object>());
allInOne.get("").put("total", 0.0);