我正在尝试使用包含多个地图的地图。每个子图包含一组类型域。但是,我不能给包含具有特定域的域的超级地图映射(例如:域)。
Domain<Spell> spells = new Domain<>("spells");
Map<String, Domain> map = new TreeMap<>();
map.put(spells.getName(), spells);
Map<String, Domain<Spell>> library = new TreeMap<>();
library.put(spells.getName(), spells);
Map<String, Map<String, Domain>> mapLibrary = new TreeMap<>();
mapLibrary.put("test", library);
但是我在最后一行代码中收到以下错误:
The method put(String, Map<String,Domain>) in the type Map<String,Map<String,Domain>> is not applicable for the arguments (String, Map<String,Domain<Spell>>)
我该怎么做才能拥有一张超级地图,其中包含多个具有不同通用参数的不同Domain的地图?
附加信息:有四个类可以扩展Magic:
- Spell extends Magic<Spell>
- Prayer extends Magic<Prayer>
- Mental extends Magic<Mental>
- Elemental extends Magic<Elemental>
超类具有泛型参数,因为它包含它所属的域,并且必须指定正确的域类型。
关于副本的修改:如上所述和评论中,我寻求找到解决方法来解决问题,而不是为什么。另一个问题的答案只是告诉了原因。
答案 0 :(得分:0)
答案是Map<String, Map<String, ? extends Domain<?>>> mapLibrary = new TreeMap<>()
该错误消息告诉您Map<String, Domain<Spell>>
无法分配给Map<String, Domain>
。这是@ john16384评论的内容,List<Dog>
不是List<Animal>
。但是List<Dog>
是List<? extends Animal>
。因此,您应该将泛型声明为Map<String, Map<String, ? extends Domain<?>>
。