static void writeTo(List<? super Apple> apples) {
apples.add(new Apple());
apples.add(new Jonathan());
}
這段代碼的作者指出,
的論點蘋果是一些類型,它是蘋果公司的基本類型的列表;因此您知道添加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) {}
如何兩者有何不同?
另外,我發佈的第一個代碼是什麼使我困惑的是我認爲的 ?超T意味着任何基類型的T,但從它的外觀來看,他添加了T的一個子類型。我很困惑。
不明白這個問題。這兩個函數似乎都有相同的簽名。問題是什麼? – vainolo
@vainolo我添加了一些關於錯誤的信息。請檢查一下 – KyelJmD
[Producer Extends,Consumer Super](http://stackoverflow.com/questions/2723397/java-generics-what-is-pecs/2723538#2723538) –