Arraylist泛型对Object类进行超分类

斯普多
    List<? extends Object> list = new ArrayList<? extends Object>();

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

罗希特·贾恩(Rohit Jain)

为什么在使用arraylist时无法将泛型超类为对象?

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

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

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

List<? extends Object> list = new ArrayList<Object>();

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

对于例如,如果你想存储EmployeeDoctor以及Student在同一个列表,在这里所有的人都从延长Person,那么你可以简单地声明列表如下:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章