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

直接在这里举个例子:

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 

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

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