【问题标题】:How to create a class which holds list of any children of a class?如何创建一个包含班级任何孩子列表的班级?
【发布时间】:2020-03-15 11:50:14
【问题描述】:

Java 疑惑:

假设我有一个名为 A 的类。 我的子类为 A1、A2、A3 等,如下所示

例如

Class A 
{

}

Class A1 extends A {
}

Class A2 extends A{}
Class A3 extends A{}


现在我有另一个类是 ListA 类。 这个类有一个属性,它基本上是 A 类的所有子类的列表。

Class ListA<T> {
List<T> listOfChildren;

ListA(int n) {
//some how instantiate the above list based on the generic type.
}
}
}

我使用了泛型类,因为我认为这是解决这个用例的好方法。但任何其他建议都会有所帮助。

【问题讨论】:

  • 这是您尝试放入代码中的内容,还是您尝试在运行时填充的内容?
  • 我不确定你的问题。你想要一个包含 A 的任何子类的列表吗?那么简单的 List 就是你的解决方案

标签: java class generics methods polymorphism


【解决方案1】:

为什么不用这个:

List<? extends ClassA> myList=new ArrayList();
myList.add(myClass);//You will receive an error if you add anything that does not extend from ClassA

【讨论】:

  • 不回答如何用 ClassA 的所有子类填充列表的问题
  • 添加到列表很简单。
  • List&lt;T extends ClassA&gt; 无效。只能在类型变量的声明中使用TypeVariable extends Bound;在一个变量上,你只能使用? extends Bound(除了null,你不能添加任何东西到List&lt;? extends ClassA&gt;)。
  • "除了null,你不能添加任何东西到List&lt;? extends ClassA&gt;"。您只能添加将 ClassA 扩展为 List&lt;? super ClassA&gt; 的内容(直接)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2013-12-24
  • 2022-01-14
  • 1970-01-01
  • 2013-06-02
  • 2018-07-24
  • 2022-01-21
相关资源
最近更新 更多