我正在查看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代替?. 只是想知道为什么编译器不为我做。