0

考虑

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?为什么会导致这个错误?

4

1 回答 1

2

这是因为 nums 是 a List<? extends Number>,所以编译器知道它是 Number 的 List 或 Number 的某个子类,但不知道是哪个。因此,您永远不会被允许在这样的列表中添加任何内容。以下是这意味着什么的示例:

List<? extends Number> nums=  new ArrayList<Integer>();

List<? extends Number> nums=  new ArrayList<Double>();

都是有效的分配。但是,如果您这样做:

nums.add(new Integer(4));

编译器不会接受这一点,因为它不能确定 nums 是Integer.

于 2013-09-19T04:55:19.597 回答