List<? extends Object> list = new ArrayList<? extends Object>();
有没有人可以帮我解释为什么我在使用arraylist时无法将泛型扩展为Object?
答案 0 :(得分:7)
为什么我不能在使用arraylist时超类对象的泛型?
因为您无法实例化通配符参数化类型。您只能使用具体的参数化类型。在new
表达式中出现通配符参数化类型是非法的。
当然,您可以使用通配符参数化类型作为引用类型。将它们视为接口。您无法实例化接口本身,但可以将其用作引用类型。
因此,请将您的声明更改为:
List<? extends Object> list = new ArrayList<Object>();
但这里唯一的问题是,你将无法在此列表中添加任何内容。事实上,我怀疑你真的需要这个列表声明。如果你只想要一个列表,你可以在其中添加一个类的任何对象及其任何子类,那么你就不需要带有上限的通配符。
例如,如果您要将Employee
,Doctor
和Student
存储在同一列表中,其中所有这些都从Person
延伸,那么您可以只需将列表声明为:
List<Person> persons = new ArrayList<Person>();
persons.add(new Employee()); // This is OK
persons.add(new Student()); // This too is OK