[英]Wildcard captures/Generics
考虑
class MyClass{
List<? extends Number> nums= new ArrayList<Integer>();
nums.add(3.14);//Compile error
}
在错误的描述中我们有: excepted add(int, Object), found add(int,CAP#1)
。 CAP#1
什么? 为什么会出现此错误?
这是因为nums是List<? extends Number>
List<? extends Number>
,因此编译器知道它是Number of Number或Number的某个子类,但它不知道哪个。 因此,永远不会允许您向此类列表添加任何内容。 以下是这意味着什么的一个例子:
List<? extends Number> nums= new ArrayList<Integer>();
和
List<? extends Number> nums= new ArrayList<Double>();
都是有效的作业。 但是,如果你这样做:
nums.add(new Integer(4));
编译器不会接受这个,因为它不能确定nums是一个Integer
列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.