有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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的防御?为什么会出现这种错误


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    都是有效的作业。然而,如果你这样做:

    nums.add(new Integer(4));
    

    编译器不会接受这一点,因为无法确定nums是Integer的列表