我正在查看Java 泛型文档并找到了这段代码,
public class WildcardError {
void foo(List<?> l) {
//This give a compile time error
l.set(0,l.get(0));
}
}
我可以理解我们正在从 a 中获取一个元素List<?>
并尝试将其设置为另一个List<?>
。所以编译器会报错。l.set(0, m.get(0))
我的问题是,当 2 个列表不同时,即此处的列表不同l
,这才有意义m
。但是在上面的例子中,l
和l
是相同的列表。为什么编译器不够聪明,看不到这一点?实施起来难吗?
编辑:我知道我可以通过辅助方法或使用T
代替?
. 只是想知道为什么编译器不为我做。