【发布时间】:2020-10-09 07:50:47
【问题描述】:
下面方法中的上限通配符意味着我们可以传入一个包含 Object 类型元素的列表或任何包含 Object 子类类型元素的列表,我不明白为什么下面没有编译,因为 string 是对象的子类:
public static void addSound(List<? extends Object> list) {
list.add("quack"); //does not compile
}
【问题讨论】:
-
List<? extends Object>表示尚未定义的内容列表,但该内容是Object的子类型。这并不意味着它是一个接受子类Object(即List<Object>)的列表。换句话说,当? extends Object被确定时,它可能是不是String的东西(仍然是Object的子类型)。这就是为什么编译器不允许您将字符串强制转换为list。 -
@ernest_k 将其写为答案,以便可以接受。