我正在阅读AngelikaLangerGenericsFaq的多级外卡.我对语法很困惑.该文件说
该类型
Collection<Pair<String,?>>是泛型Collection接口的具体实例.它是不同类型对的异构集合.它可以包含类型的元素Pair<String,Long>,Pair<String,Date>,Pair<String,Object>,Pair<String,String>,等等等等.换句话说,Collection<Pair<String,?>>包含不同类型的形式的混合对Pair<String,?>.类型
Collection<? extends Pair<String,?>>是通配符参数化类型; 它不代表具体的参数化类型.它代表集合系列中的代表,它是Collection接口的实例化,其中type参数是表单的形式Pair<String,?>.兼容的实例是Collection<Pair<String,Long>>,Collection<Pair<String,String>>,Collection<Pair<String,Object>>,或Collection<Pair<String,?>>.换句话说,我们不知道它所代表的Collection的实例.根据经验,您必须从上到下阅读多级通配符.
我对以下几点感到困惑.
有人可以详细说明这些要点.谢谢.
我正在尝试创建一个hashmap值的hashmap,其中包含自定义类的不同子类的hashsets,如下所示:
HashMap<String, Hashmap<String, HashSet<? extends AttackCard>>> superMap
AttackCard有子类,如:Mage,Assassin,Fighter.superMap中的每个HashMap只会包含一个包含单个子类的HashSets AttackCard.
当我尝试放一个
HashMap<String, HashSet<Assassin>>
下面是发生错误的代码:
public class CardPool {
private HashMap<String, HashMap<String, HashSet<? extends AttackCard>>> attackPool =
    new HashMap<>();
private ArrayList<AuxiliaryCard> auxiliaryPool;
public CardPool() {
(line 24)this.attackPool.put("assassins", new AssassinPool().get());
/*  this.attackPool.put("fighters", new Fighter().getPool());
    this.attackPool.put("mages", new Mage().getPool());
    this.attackPool.put("marksmen", new Marksman().getPool());
    this.attackPool.put("supports", new Support().getPool());
    this.attackPool.put("tanks", new Tank().getPool());
*/  
    this.auxiliaryPool = new ArrayList<>(new AuxiliaryCard().getPool()); 
}
这里有一个AssassinPool get方法的片段:
private HashMap<String, HashSet<Assassin>> pool = new HashMap<>();
    public HashMap<String, …