代码之家  ›  专栏  ›  技术社区  ›  Brendan

Java中从父类继承的对象的ArrayList

  •  1
  • Brendan  · 技术社区  · 2 年前

    我有课, controlBase ,这是由其他子类继承的。我怎样才能列出这些儿童课程?

    我尝试过:

    private ArrayList<? extends controlBase> controllers = new ArrayList();
    

    任何 要添加到其中的类。在上述示例中,这会引发一个错误:

    public <T extends controlBase> void registerController(Class<T> c) {
        controllers.add(c);
    }
    

    执行时也会引发错误:

    controllers.add(new controlBase());
    

    controllers.add(new joystick()); // Joystick is a child-class of controlBase
    

    这不允许添加任何类,即使在第一个示例中,它明确声明该类扩展 controlBase .

    如何使此arrayList仅包含扩展 controlBase

    1 回复  |  直到 2 年前
        1
  •  2
  •   Silvio Mayolo    2 年前

    您误解了调用站点差异注释的要点。 ? extends ControlBase 意味着数据可以安全地 阅读 来自容器as ControlBase 但是那 没有什么 可以写入它。看见 my answer on a similar question 了解更多有关何时 希望 使用此语法,或 PECS 有关一般规则的摘要。

    在你的情况下,你想要,非常简单, ArrayList<ControlBase> . 每一个 Joystick ControlBase ,根据继承规则,因此可以向其中添加任何子类 ArrayList 只要你喜欢。