Java 访问可以是ConcurrentHashMaps的对象的ConcurrentHashMap

Java 访问可以是ConcurrentHashMaps的对象的ConcurrentHashMap,java,templates,object,casting,concurrenthashmap,Java,Templates,Object,Casting,Concurrenthashmap,为了提高效率,我尝试将数据保存在一个动态容器中 我在类中使用 private final ConcurrentHashMap<String, Object> allInOne = new ConcurrentHashMap<String, Object>(); 我已经看到了,我很高兴有一个解决方案,但是有没有办法不用铸造就可以做到呢?如果没有,是否有更好的方法来模板化allInOne 特殊情况 我同意所有关于严格原子性的错误做法,并建议其他人不要这样做,但我

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

我在
类中使用

private final ConcurrentHashMap<String, Object> allInOne = 
    new ConcurrentHashMap<String, Object>();
我已经看到了,我很高兴有一个解决方案,但是有没有办法不用铸造就可以做到呢?如果没有,是否有更好的方法来模板化allInOne


特殊情况


我同意所有关于严格原子性的错误做法,并建议其他人不要这样做,但我正在尝试尽快完成一个工作原型。

您需要显式地将
allInOne.get(account)
转换为
ConcurrentHashMap()

像这样做

ConcurrentHashMap<String, Object> accountMap = (ConcurrentHashMap<String, Object>)allInOne.get(account);
ConcurrentHashMap accountMap=(ConcurrentHashMap)allInOne.get(account);

这是一个非常糟糕的主意,你正想这么做。但是你可以做如下的事情

private final ConcurrentHashMap<String, ConcurrentHashMap<String, Object>> allInOne = new ConcurrentHashMap<String, ConcurrentHashMap<String, Object>>();
但这两行代码可以编译

allInOne.put("", new ConcurrentHashMap<String, Object>());
allInOne.get("").put("total", 0.0);
allInOne.put(“,新的ConcurrentHashMap());
allInOne.get(“”)put(“总计”,0.0);

不要这样做;这是个坏主意。而且要使它正确的线程安全也是非常困难的。@SLaks谢谢!是的,我知道这是不好的做法,但我希望现在有一个工作原型,以后再清理。你能提个建议吗?提前非常感谢!谢谢大家!!是的,严格的模板在我的情况下不起作用。你能想出一个不涉及模板和铸造的替代方案吗?提前非常感谢您@这是比我的答案更好的解决方案。不,我没有。你有没有合理的理由不使用泛型或强制转换?@Jayamohan编码速度。我只是想要一个松散的概念证明的工作原型。一旦我完成了,我肯定会按照这里推荐的最佳实践来重新编写代码。
accountMap
是一种“指针”吗?更改
accountMap
会更改它初始化为的数据吗?@Gracchus是的,在java中,除了原始数据类型之外,所有都是引用,如果您更改它将返回的引用值。太棒了!这是一个很好的解决办法!非常感谢你!
allInOne.put("total", 0.0); 
allInOne.put("", new ConcurrentHashMap<String, Object>());
allInOne.get("").put("total", 0.0);