了解 java 中的通用上限通配符

Understanding generic upper bound wildcarts in java

下面方法中的上界通配符意味着我们可以传入一个包含 Object 类型元素的列表或任何包含 Object 子类类型元素的列表,我不明白为什么下面的代码没有编译,因为字符串是对象的子类:

public static void addSound(List<? extends Object> list) {
list.add("quack"); //does not compile
}

上限泛型是不可变的。扩展类型可以是任何扩展对象的类型,它可以是 Ducks 的列表。然后你就会明白为什么它不起作用。 (list.add(new Duck()) 与“庸医”不同)

虽然下限工作

   public static void addSound(List<? super String> list) {
    list.add("quack"); //does compile
   }