【发布时间】:2014-01-28 18:18:51
【问题描述】:
我在看Java Generics documentation,发现了这段代码,
public class WildcardError {
void foo(List<?> l) {
//This give a compile time error
l.set(0,l.get(0));
}
}
我可以理解我们正在从 List<?> 获取一个元素并尝试将其设置为另一个 List<?>。所以编译器会报错。我的问题是当两个列表不同时有意义,即l.set(0, m.get(0)) 这里列表l 和m 不同。但是在上面的例子中,l 和l 是同一个列表。为什么编译器不够聪明,看不到这一点?实施起来难吗?
编辑:
我知道我可以通过辅助方法或使用T 而不是? 来修复它。只是想知道为什么编译器不为我做。
【问题讨论】: