通配符捕获/泛型

时间:2013-09-19 04:43:22

标签: java generics wildcard

考虑

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的辩护是什么?为什么会出现这个错误?

1 个答案:

答案 0 :(得分:2)

这是因为nums是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的列表。