Arraylist泛型超类对象类

Spu*_*dow 1 java generics

    List<? extends Object> list = new ArrayList<? extends Object>();
Run Code Online (Sandbox Code Playgroud)

有没有人可以帮我解释为什么我不能在使用arraylist时将泛型扩展到Object?

Roh*_*ain 7

为什么我不能使用arraylist时超类对象的泛型?

因为您无法实例化通配符参数化类型.您只能使用具体的参数化类型.new表达式中出现通配符参数化类型是非法的.

当然,您可以使用通配符参数化类型作为引用类型.将它们视为接口.您无法实例化接口本身,但可以将其用作引用类型.

因此,将您的声明更改为:

List<? extends Object> list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)

但这里唯一的问题是,你将无法在此列表中添加任何内容.事实上,我怀疑你真的需要这个列表声明.如果您只想要一个列表,您可以在其中添加类的任何对象及其任何子类,那么您不需要带上限的通配符.

例如,如果要存储Employee,DoctorStudent,在同一列表中,所有这些扩展的位置Person,那么您可以简单地将列表声明为:

List<Person> persons = new ArrayList<Person>();
persons.add(new Employee());  // This is OK
persons.add(new Student());   // This too is OK
Run Code Online (Sandbox Code Playgroud)