1.规则
- 集合中读取类型T的数据, ? extends T 或者 ?
- 集合中添加数据 ? super T
- ? 和 ? extends T不能添加数据
- 消费者使用“? extends T”通配符,生产者使用“? super T”通配符
2.示例
List<String> namesOri = new ArrayList<>();
namesOri.add("A");
namesOri.add("B");
List<?> names = namesOri;
// names.add("sss");
List<Object> allNames = new ArrayList<>();
allNames.add("C");
allNames.addAll(names);
// 只能迭代
for (Object name : names) {
log("names -> " + name.toString());
}
for (Object allName : allNames) {
log("allName -> " + allName);
}
List<? extends String> namesExtend = namesOri;
// The method add(capture#3-of ?) in the type List<capture#3-of ?> is not
// applicable for the arguments (Object)
List<? super String> namesSuper = namesOri;
// 添加普通元素
namesSuper.add("namesSuperTest");
List<? extends String> namesSuper1 = namesOri;
namesSuper.addAll(namesSuper1);
log(namesSuper.toString());