List<? extends Object> list = new ArrayList<? extends Object>();
有没有人可以帮我解释为什么在使用arraylist时我不能将泛型扩展到Object?
为什么在使用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