Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java <;有什么用?扩展E>;_Java_Generics_Collections_Wildcard - Fatal编程技术网

Java <;有什么用?扩展E>;

Java <;有什么用?扩展E>;,java,generics,collections,wildcard,Java,Generics,Collections,Wildcard,在使用泛型时,我遇到了声明。 以集合接口的addAll方法为例 其宣言如下: interface Collection<E> { public boolean addAll(Collection<? extends E> c); } 错误: 对于类型List 我还读了O'Reilly的“Java泛型和集合” 一般来说,若一个结构包含一种形式的元素?扩展E,我们可以将元素从结构中取出,但不能将元素放入结构中 所以我的问题是,当我们不能用这个来修改这个

在使用泛型时,我遇到了声明
<?扩展E>
。 以集合接口的addAll方法为例

其宣言如下:

   interface Collection<E> {
      public boolean addAll(Collection<? extends E> c);
  }
错误:

对于类型List)方法未定义?扩展号码>

我还读了O'Reilly的“Java泛型和集合”

一般来说,若一个结构包含一种形式的元素?扩展E,我们可以将元素从结构中取出,但不能将元素放入结构中


所以我的问题是,当我们不能用这个来修改这个东西时,那有什么用呢?如果该集合是子类型,则仅从该集合中获取元素?

这意味着addAll方法允许任何扩展E类的对象集合。 例如,如果G扩展了E,则可以向该集合添加一个G数组

所以我的问题是,当我们不能用这个来修改这个东西时,那有什么用呢?如果它是一个子类型,就从该集合中获取元素

是的,没错。只是为了从中获取元素


请记住,
collection您是否尝试过搜索?这一定是以前问过的。是的,我问过。但是没有问题包括我问过的问题,我知道这个通配符的用法,但我的问题是,当我们无法添加/更改现有集合时,为什么要使用它。我没有收到任何编译错误。我认为add不会以这种方式工作。无法在此集合中添加数组。从技术上讲,通过声明,我唯一能清楚看到的是collections类中Sort方法的用法。集合实现静态类。Sort是其中一种语法:publicstatic
List<Integer> ints = new ArrayList<Integer>();
ints.add(1);
ints.add(2);

List<? extends Number> nums = ints; // now this line works
/*
 *without using ? syntax above line did not use to compile earlier 
 */
List<Double> doubleList = new ArrayList<Double>();
doubleList.add(1.0);
nums.addall(doubleList); // compile time error