Java 如何安全地从地图检索ArrayList<;字符串,对象>;

Java 如何安全地从地图检索ArrayList<;字符串,对象>;,java,generics,Java,Generics,如何从存储的键值为ArrayList的映射中安全地检索ArrayList对象。下面是我的代码。除了向ArrayList投稿,还有其他方法吗 public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); Map<String, Object> map = new Has

如何从存储的键值为ArrayList的映射中安全地检索ArrayList对象。下面是我的代码。除了向ArrayList投稿,还有其他方法吗

public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("A"); list.add("B");

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("list", list);
    System.out.println(map.get("list").getClass()); // class java.util.ArrayList
    List<String> l = (ArrayList<String>)map.get("list");
}
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
列表。添加(“A”);列表。添加(“B”);
Map Map=newhashmap();
地图放置(“列表”,列表);
System.out.println(map.get(“list”).getClass();//class java.util.ArrayList
List l=(ArrayList)map.get(“List”);
}

我正在使用来自
Jackson
@JsonAnySetter
来存储
地图。当我检查类时,它们是类
java。util.ArrayList
。(与问题中解释的情况完全相同)

在尝试了几件事之后,我终于得到了它。我知道我有点晚了,但希望这会对将来的人有所帮助:

我有
映射
对象
正在存储另一个
映射
字符串
,或者
数组列表
,所以我做了以下事情从
映射
中获取值。您可以将其用作参考,并根据所需类型执行不同的操作

public void marshal(Map<String, Object> extensions) {
    for (Map.Entry<String, Object> property : extensions.entrySet()) {
       if (property.getValue() instanceof ArrayList) {
            for (Object dupItems : (ArrayList<String>) property.getValue()) {
                 if (dupItems instanceof Map) {
                    //do whatever you want to do Map type
                  } else if(dupItems instanceof String) {
                    //do whatever you want to do for String type
                  }
            }
        } 
    }
}
公共无效封送处理(映射扩展){
for(Map.Entry属性:extensions.entrySet()){
if(property.getValue()instanceof ArrayList){
对于(对象dupItems:(ArrayList)属性。getValue(){
if(映射的dupItems实例){
//做任何你想做的事地图类型
}else if(字符串的dupItems实例){
//对字符串类型执行任何操作
}
}
} 
}
}

不要在存储对象的地图中存储arraylist。相反,请告诉地图存储ArrayList(或列表)。不要丢弃您仍然需要的类型信息。这表明您的体系结构不好,应该重新设计,而不是试图使强制转换安全。@Zabuza给了您很好的建议。
Map
是您可以做的事情。此外,您可以使用
instanceof
来检查强制转换是否安全。但正如前面所说,这种需求通常意味着糟糕的设计。如果你坚持使用
Map
,除了铸造,你别无选择