方法放<string,arraylist <superclass =“”>&gt;不适用于参数<string,arraylist <subclass =“”>&gt; </string,> </string,>

时间:2015-02-13 23:06:46

标签: java arraylist

public class Declaration {}

public class Class_object extends Declaration{}

上面是我的类声明,所以基本上Class_object是类声明的子类。

    Map<String,ArrayList<Declaration>> structure = new HashMap<String,ArrayList<Declaration>>();
    ArrayList<Class_object> co = new ArrayList<Class_object>();
    structure.put("CLASS", co);//here gives error:The method put(String, ArrayList<Declaration>) in the type Map<String,ArrayList<Declaration>> is not applicable for the arguments (String, ArrayList<Class_object>)

在另一个类中,我尝试创建一个hashmap来包含Decla的不同子类,但它给了我错误信息。 谁能告诉我如何解决它?

2 个答案:

答案 0 :(得分:1)

泛型是不变的。你可以做到

Map<String, List<? extends Declaration>> structure 
            = new HashMap<String, List<? extends Declaration>>();

答案 1 :(得分:0)

您必须使用extends关键字才能将Declaration的子类放入地图中。像这样定义:

Map<String,ArrayList<? extends Declaration>> structure = new HashMap<String,ArrayList<? extends Declaration>>();

? extends Declaration让java知道您希望能够使用任何扩展Decla的类,例如Class_object。