我有一個非常基本的問題。在理解中掙扎<? extends T> Java中的通配符
下面的代碼無法編譯(假設蘋果擴展水果):
List<? extends Fruit> numbers = new ArrayList<>();
numbers.add(new Apple()); //compile time error
當看到有關爲什麼不呢,我不懂的話,但沒有這個概念:)。
我們假設第一個水果不是抽象類。我明白,因爲我們正在處理多種子類型,所有這些擴展了Fruit。據推測,由於我們無法確定水果的確切類型,因此我們不能在該系列中添加任何東西。有幾件事我不明白:
1)顯然我們無法知道它是哪個水果讓我困惑。在迭代集合的時候,我們不能通過類型檢查或其他實例檢查來告訴特定類型嗎?
2)假設Fruit是一個具體類,爲什麼我們不允許添加Fruit的實例?這似乎是有道理的,因爲你至少會知道Fruit的API。即使你不知道Fruit的確切子類型,至少你可以在Fruit()上調用標準方法。
我覺得這應該是相當明顯的,但有些東西不是我的點擊。任何幫助表示感謝。謝謝!
不應該是'new Apple()'(即括號丟失)嗎? – 5ar
http://stackoverflow.com/questions/12292752/java-wildcards-and-generics-super-t-and-extends-t?rq=1 – adeady
可能的重複[Java通配符和泛型?超級T和?擴展T](http://stackoverflow.com/questions/12292752/java-wildcards-and-generics-super-t-and-extends-t) – adeady