Java Generics:在arraylist(无界通配符类型)上,add和addAll方法的行为有所不同

yap*_*m01 5 java generics

直接在这里举个例子:

    ArrayList <?> x = new ArrayList();
    ArrayList y = new ArrayList();
    x.add("abc"); // Clause 1. Compilation error - No problemo. Understood.
    x.addAll(y); // Clause 2. No compilation error
Run Code Online (Sandbox Code Playgroud)

对于无界通配符,无法添加.为什么最后一个语句没有编译错误?

Boz*_*zho 7

因为您正在使用原始类型调用该方法.编译器无法执行类型检查.如果您使y用户泛型,addAll(..)将失败.