【问题标题】:Java Map GenericJava 映射通用
【发布时间】:2015-02-13 16:39:51
【问题描述】:

顶部地图有3个子地图,每个子地图都有不同的对象。

像下面的代码,我怎样才能将泛型添加到地图顶部?

    Map<String,Map> top = new ConcurrentHashMap<String, Map>();

    Map<String,TypeA> subA = new ConcurrentHashMap<String,TypeA>();
    Map<Long,TypeB> subB = new ConcurrentHashMap<String,TypeB>();
    Map<String, long[]> sbuC = new ConcurrentHashMap<String,TypeC>();
    top.put("SUB_A", subA);
    top.put("SUB_B", subB);
    top.put("SUB_C", subC);

【问题讨论】:

  • 这看起来不应该Map中——它应该在带有强类型字段的Object中,而不是全部塞进@987654324 @ 这将需要不安全的强制转换。
  • 它来自旧应用程序。我们读取文件,转换为 Object 并将它们放入 Gemfire。现在我正在寻找一种快速删除 Gemfire 的方法

标签: java generics dictionary


【解决方案1】:

试试这个:

Map<String,Map<<? extends  Object,?>> top = new ConcurrentHashMap<String, Map< <? extends Object,?>>();

键是object,值是任意类型。

【讨论】:

  • 我试过了,得到这个“Map> 类型中的方法 put(String, Map) 不适用于参数 (String,地图)"
  • Map&lt;String,Map&lt;? extends Object,?&gt;&gt; top = new ConcurrentHashMap&lt;String, Map&lt;? extends Object,?&gt;&gt;(); 为我避免了编译错误。此外,Map&lt;String,Map&lt;?,?&gt;&gt; top = new ConcurrentHashMap&lt;&gt;(); 有效。不过,在我看来,两者都显得很奇怪。
  • @user3644708 改变了我的答案
  • 谢谢大家,它有效。 @azurefrog,我该如何更新它?你能告诉我更多信息吗?谢谢
猜你喜欢
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-01
  • 2011-10-09
  • 1970-01-01
相关资源
最近更新 更多