以下内容来自泛型教程:
说类 R 扩展了 S,
public void addR(List<? extends S> s) {
s.add(0, new R()); // Compile-time error!
}
您应该能够弄清楚为什么不允许上面的代码。s.add() 的第二个参数的类型是?extends S -- S 的未知子类型。由于我们不知道它是什么类型,所以我们不知道它是否是 R 的超类型;它可能是也可能不是这样的超类型,因此在此处传递 R 是不安全的。
我已经阅读了几次,但我仍然不太明白为什么以下是错误
给定 List.add() 的签名
void add(int index, E element)
它不等于
void add(int index, <? extends S> element) // just to explain the idea, not a valid syntax
为什么错误调用 add(0, new R()) R 是 S?