假设我有:

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/

10-11 22:54
查看更多