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