2015-10-01 2 views
-1

Может кто-нибудь, пожалуйста, дайте мне знать, почему это не работает?Java Generics lowerbound

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

Я понимаю, что список переменных может содержать любое значение, если оно является суперклассом Person. Объект определенно является суперклассом Person, и почему его нельзя добавить в список?

ответ

0

Предположим, у вас есть иерархия классов, как Object -> Movable -> Person и в этом случае List<? super Person> может указывать на:

  1. список Movable (List<Movable>) или
  2. список Object (List<Object>)

You не знаю, какой тип элементов (Movable или Object) будет отображаться точно во время выполнения (generics - это явление времени компиляции).

По этой причине вставка не допускается в таком случае, так как она может в итоге добавить Object в список Movable во время выполнения. Итак, золотое правило - Producer Extends Consumer Super.