This question already has answers here:
How can I add to List<? extends Number> data structures?
(6 个回答)
4年前关闭。
我无法理解这里出了什么问题
据我了解
怎么了? (用
当您将其声明为
这意味着您可以为它分配任何包含
例如,您可以为其分配一个
因此,如果您尝试将一个
(6 个回答)
4年前关闭。
我无法理解这里出了什么问题
import java.util.*;
class Main {
private static class SomeX {}
void doSomethingWithX(SomeX someX) {
Collection<? extends SomeX> colectionOfX = new ArrayList<>();
colectionOfX.add(someX);
}
}
javac
说明如下:据我了解
extends
将 CAP#1 的下限限制为 SomeX
并且 SomeX
本身应该满足该限制。怎么了? (用
javac 1.8.0_102
编译) 最佳答案
如果要允许 colectionOfX
包含 SomeX
的任何实例,则应将其声明为:
Collection<SomeX> colectionOfX = new ArrayList<>();
当您将其声明为
Collection<? extends SomeX> colectionOfX = ...;
这意味着您可以为它分配任何包含
Collection
或 SomeX
子类的某种类型元素的 SomeX
。例如,您可以为其分配一个
List<SomeBX>
,其中 SomeBX
扩展 SomeX
。在这种情况下,只能将 SomeBX
的实例添加到集合中。因此,如果您尝试将一个
SomeX
实例添加到集合中,该实例不是 SomeBX
(例如, SomeAX
的实例,它也是 SomeX
的子类),它将是无效的。关于java - 不兼容的类型 : SomeX cannot be converted to CAP#1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39684999/
10-10 09:26