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

问题描述

以下方法中的上限通配符意味着我们可以传入一个包含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
   }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...