Java 在通配符类型ArrayList中添加元素

Java 在通配符类型ArrayList中添加元素,java,generics,arraylist,wildcard,bounded-wildcard,Java,Generics,Arraylist,Wildcard,Bounded Wildcard,我试图在列表中添加一个元素,其中列表类型参数是扩展问题的通配符 ArrayList<? extends Question> id = new ArrayList<? extends Question>(); id.add(new Identification("What is my name?","some",Difficulty.EASY)); map.put("Personal", id); ArrayList想象以下场景: List<

我试图在列表中添加一个元素,其中列表类型参数是扩展问题的通配符

    ArrayList<? extends Question> id  = new ArrayList<? extends Question>();
    id.add(new Identification("What is my name?","some",Difficulty.EASY));
    map.put("Personal", id);

ArrayList想象以下场景:

List<MultipleChoiceQuestion> questions = new ArrayList<MultipleChoiceQuestion>();
List<? extends Question> wildcard = questions;
wildcard.add(new FreeResponseQuestion()); // pretend this compiles

MultipleChoiceQuestion q = questions.get(0); // uh oh...

ArrayList@veer事情是这样的。我想添加其他子类型的问题,如multipleechoice等。列表本身不仅包含标识列表,还包含乘法或其他子类型的问题。。。。然后您需要
ArrayList
:-)允许将任何
问题添加到列表中。为什么允许这样做?我认为继承规则不适用于类型参数?这与“继承规则……应用于类型参数”无关,这与任何
multipleechoice
Identification
都是
Question
s这一事实有关。
List<MultipleChoiceQuestion> questions = new ArrayList<MultipleChoiceQuestion>();
List<? extends Question> wildcard = questions;
wildcard.add(new FreeResponseQuestion()); // pretend this compiles

MultipleChoiceQuestion q = questions.get(0); // uh oh...
List<Question> id = new ArrayList<Question>();
id.add(new Identification(...));