Java Casting问题

cim*_*ine 0 java generics casting

为什么不是Map<String,List<SomeBean>>施法者Map<String,List<?>>

我现在正在做的是:

Map<String, List<SomeBean>> fromMap = new LinkedHashMap<String, List<SomeBean>>();

/* filling in data to fromMap here */

Map<String,List<?>> toMap = new LinkedHashMap<String, List<?>>();
for (String key : fromMap.keySet()) {
    toMap.put(key, fromMap.get(key));
}
Run Code Online (Sandbox Code Playgroud)

在我看来,应该有一种解决这种手动转换的方法,但我无法弄清楚如何.有任何想法吗?

Jer*_*ome 5

强制转换是无效的,因为在Map <String,List <?>>中可以放置List <String>和List <WhatEver>,但不能放在Map <String,List <SomeBean >>中.

例如:

    //List<SomeBean> are ok in both lists
    fromMap.put("key", new ArrayList<SomeBean>());
    toMap.put("key", new ArrayList<SomeBean>());

    //List<String> are ok in Map<String,List<?>>, not in Map<String, List<SomeBean>>
    fromMap.put("key", new ArrayList<String>()); //DOES NOT COMPILE
    toMap.put("key", new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)

为了简化代码,您可以使用适当的构造函数来简化代码:

    Map<String, List<SomeBean>> fromMap = new LinkedHashMap<String, List<SomeBean>>();
    Map<String,List<?>> toMap = new LinkedHashMap<String, List<?>>(fromMap);
Run Code Online (Sandbox Code Playgroud)