Java 泛型:在 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
对于无界通配符,不能添加。为什么最后一条语句没有编译错误?
To be direct here's an example:
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
For unbounded wildcard, one cannot add. Why there is no compilation error on the last statement?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为您正在使用原始类型调用该方法。编译器无法执行类型检查。如果您创建
y
用户泛型,addAll(..)
将会失败。Because you are invoking the method with a raw type. The compiler can't perform type checks. If you make
y
user generics,addAll(..)
will fail.