假设我有:
class A{
}
class B extends A{
}
class C extends A{
}
为什么以及何时要使用
ArrayList<? extends A>
,为什么不简单地编写ArrayList<A>
? 最佳答案
考虑到您不是创建列表的人,而是将它从某个地方传递给您。假设您有一个采用参数List<? extends A>
的方法。有人可以调用您的方法,并将您创建的List<B>
传递给您。但是,如果您声明参数只是List<A>
,则不允许他将List<B>
传递给您。
原因如下:在第一种情况下,您的参数为List<? extends A>
,由于您不知道调用方是如何创建它的,因此不允许将其添加到此列表中。如果您添加了一个C实例并返回了,那么他现在在List<B>
中将有一个C对象。如果它是真实的List<A>
,则可以安全地添加它。
关于java - ArrayList <?扩展A> vs ArrayList <A>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60441265/