Avatar ·

Java泛型中<? super T>和<? extends T>的区别

各位同行好!我开始学习Java泛型,遇到了通配符(wildcards)。我读过文档也看过视频,但至今仍对``和``这两个结构感到困惑。 我理解`? extends T`表示“某个是T的子类型的类型”,而`? super T`表示“某个是T的超类型的类型”。但在实践中,我总是遇到编译错误。 例如,我有这样一个使用List的代码: ```java public class Test { public static void addNumbers(List list) { list.add(42); // 这能工作 } public static void readNumbers(List list) { Integer num = list.get(0); // 这能工作 list.add(42); // 编译错误!为什么? } } ``` 为什么我不能向`List`添加元素,尽管可以从中读取?反过来——为什么我可以向`List`添加元素,但从中读取时只能得到Object?