List<? extends Object> list = new ArrayList<? extends Object>();
有没有人可以帮助我解释为什么不能使用arraylist扩展泛型到对象?Arraylist泛型超类对象类
List<? extends Object> list = new ArrayList<? extends Object>();
有没有人可以帮助我解释为什么不能使用arraylist扩展泛型到对象?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
你能解释一下你的问题是另一种方式?我无法弄清楚你不能做什么。 –