繁体   English   中英

通配符捕获/泛型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM