2015-10-01 74 views
-1

任何人都可以讓我知道爲什麼這不起作用?Java泛型下行

List<? super Person> list = new ArrayList<>(); 
list.add(new Object()); 

我的理解是變量列表可以保存任何值,只要它是Person的超類。 Object絕對是Person的超類,那麼爲什麼它不能被添加到列表中?

回答

0

假設你有一個類層次結構Object -> Movable -> Person,並在這種情況下List<? super Person>可以指向:

  1. 列表MovableList<Movable>)或
  2. ObjectList<Object>
  3. 列表

你不知道什麼類型的元素(MovableObject)列表將在運行時恰好具有(泛型是編譯時現象)。

這就是在這種情況下不允許插入的原因,因爲它可能最終在運行時將Object添加到Movable列表中。所以黃金法則是Producer Extends Consumer Super