通用类型java.util.List继承

时间:2013-12-24 13:40:11

标签: java list generics inheritance

假设我有两个课程孩子儿童继承自。我还有2个其他类 Class1 Class2

Class1 的构造函数只有一个参数 - 它是 Person 的java.util。 List Class2 包含儿童的列表。我想将这些孩子传递给 Class1 构造函数。但是我不能这样做--Eclipse说那个

The constructor Class1(List<Child>) is undefined.

我认为这是可能的,因为儿童继承自。有什么问题?

SSCCE(不可编辑)可能如下所示:

Class2中的某个地方

List<Child> childs = new ArrayList<Child>();
new Class1(childs);

Class1构造函数

public Class1(List<Person> persons)
{
//do nothing();
}

2 个答案:

答案 0 :(得分:4)

如果List<Apple>List<Fruit>,您可以执行以下操作:

List<Apple> apples = new ArrayList<>();
List<Fruit> fruits = apples; // this doesn't actually compile
fruits.add(new Banana()); 

因此它将彻底打破泛型类型的类型安全性。如果你希望Class1接受任何类型Person的列表,那么它应该以{{1​​}}作为参数。

答案 1 :(得分:2)

如果以这种方式定义构造函数

public Class1(List<? extends Person> persons) {
}

您可以将List<Child>传递给它