这段代码
static void writeTo(List<? super Apple> apples) {
apples.add(new Apple());
apples.add(new Jonathan());
}
这段代码的作者说
参数 apples 是某种类型的 List,它是 Apple 的基本类型;因此您知道添加 Apple 或 Apple 的子类型是安全的。由于下限是苹果,
乔纳森是苹果的一个子类。
但是当我尝试这个时
List<Jonathan> loj = new ArrayList<Jonathan>();
listSuper(loj);
它给了我这个错误
The method listSuper(List<? super Apple>) in the type Basket<T> is not applicable for the arguments (List<Jonathan>)
哪里listSuper
看起来像这样
static void listSuper (List<? super Apple> cont) {}
两者有何不同?
还有什么让我对我发布的第一个代码感到困惑的是我认为?super T 表示 T 的任何基本类型。但从外观上看,他添加了 T 的子类型。我很困惑。