假设我有两个课程人和孩子。 儿童继承自人。我还有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();
}
答案 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>
传递给它