为什么List <String>接受另一个<List>作为元素

cra*_*ace 2 java generics

import java.lang.Math;
import java.util.*;
import java.io.*;


class Hello {


    public static void main(String args[]) throws FileNotFoundException{

        String[] veri2 = {"No", "Compilation", "Error"};

        List<String> veri1 = new ArrayList<String>();
        veri1.addAll(Arrays.asList(veri2)); // ---------- 14
        System.out.println(veri1+"elements in hashset");

    } 

}
Run Code Online (Sandbox Code Playgroud)

为什么当List被添加到其元素类型为String的另一个List时,上面的代码在第14行不会抛出编译错误?

Dan*_*Tao 8

List<E>.addAll方法接受a Collection<? extends E>,List<E>接口继承自Collection<E>.

如果您尝试添加String使用addAll,实际上会出现错误.

List<String> list = new ArrayList<String>();
list.addAll("Hello");
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,因为String没有实现Collection<String>.

  • @whataheck:不,泛型正在正常工作以强制编译时正确性.您将所有`String`s从一个`List <String>`添加到另一个.你不能做`stringList.addAll(integerList)`. (3认同)