问题描述
以下方法中的上限通配符意味着我们可以传入一个包含Object类型的元素的列表,或者传入一个包含类型为Object的子类型的元素的List,我不明白为什么不编译以下内容,因为string是对象的子类:
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
}