【发布时间】:2015-03-18 04:35:16
【问题描述】:
我正在处理arraylist 中的上限通配符(?)。当我使用通配符声明一个数组列表时它不起作用。 例如 : 我有三个班级:
1) 人物类:
public class Person {
}
2) 扩展person的员工类:
public class Employee extends Person {
}
3) 扩展员工的部门类。
public class Dept extends Employee{
}
现在我希望这三个类的对象应该添加到一个单独的类中的arraylist,如下所示。
public class TestPerson {
public static void main(String[] args) {
Person p1 =new Person();
Employee e1 = new Employee();
Dept d1 = new Dept();
ArrayList<? extends Person> al =new ArrayList<Person>();
al.add(p1);
al.add(e1);
al.add(d1);
}
}
代码中的最后三行显示以下错误: ArrayList 类型的 add(capture#1-of ? extends Person) 方法不适用于参数(对象类型)。
但是从“?扩展人”类型的数组列表中,可以取“任何对象扩展人”,但为什么它不接受扩展的员工对象 人。
【问题讨论】: