访问可以是ConcurrentHashMaps的对象的ConcurrentHashMap

时间:2013-12-02 01:09:27

标签: java templates object casting concurrenthashmap

为了提高工作效率,我试图将数据保存在一个动态容器中。

我使用

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


特殊情况

我同意所有这些都是严格原子性的不良做法,并向其他人推荐反对,但我正试图尽快完成工作原型。

2 个答案:

答案 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);