0
考慮通配符超
List<? super Integer> lst= new ArrayList<Number>();
lst.add(new Integer(3)); //ok- why?? I expected compile error "expected add(int, Object), found add(int,CAP#1)"
lst.get(0); //ok
和
List <? extends Number> nums= new ArrayList<Integer>();
lst.add(new Integer(3));//Compile error- expected add(int, Object), found add(int,CAP#1)
在我們不知道類型的<? extends Number>
,並有編譯錯誤編譯狀態。我們知道關於編譯狀態的類型<? super Integer>
嗎?爲什麼?
好的,謝謝。現在我不明白什麼不同'List <? super Integer> lst = new ArrayList();'from'List lst = new ArrayList ();'? –
@ St.Antario這兩條線都涉及兩件事情。 *首先*,你定義一個名爲'lst'的變量,並說出它是什麼類型。 *然後*,您構造一個對象並將其分配給此變量。對象的實際類型和變量的聲明類型可能不同。比較'對象a =「hello」;'vs'String b =「hello」;',如果有幫助的話。實際的字符串在兩種情況下都是相同的,但是您不能調用'a.length()',因爲唯一保證您具有'a'中的內容的是它是'Object'。 –