Avatar ·

什么是Java泛型中的PECS(Producer Extends Consumer Super)?

大家好!我已经用Java写代码几个月了,但至今对泛型中的通配符感到困惑。我读过关于PECS的资料,但在实践中仍然不明白什么时候使用`? extends T`,什么时候使用`? super T`。 下面是一个让我困惑的具体例子。我有一个方法,应该将元素从一个列表复制到另一个列表: ```java public static void copy(List src, List dest) { for (Object item : src) { dest.add(item); // 编译错误! } } ``` 编译器对`dest.add(item)`报错。我知道需要使用有界通配符,但不知道具体该用哪些。 假设我有这样一个类层次结构:`Animal` → `Dog` → `Puppy`。我想写一个方法,它: 1. 从列表中读取对象(例如,`Dog`列表) 2. 将它们写入另一个列表(例如,`Animal`列表) 如何正确声明`src`和`dest`的类型?还有,PECS这个缩写到底是什么意思?希望能得到带示例的详细解释。