java通配符捕获/泛型
考虑
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
的防御?为什么会出现这种错误
你可以在下面搜索框中键入要查询的问题!
考虑
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 楼答案
这是因为nums是一个
List<? extends Number>
,所以编译器知道它是一个数字列表或数字的某个子类,但它不知道是哪个。因此,你永远不会被允许在这样的列表中添加任何内容。下面是一个例子来说明这意味着什么:及
都是有效的作业。然而,如果你这样做:
编译器不会接受这一点,因为无法确定nums是
Integer
的列表