Давеча на собеседовании был озвучен вопрос:
Можно ли при определении generic коллекции указать типом переменной коллекцию класса-предка, а проинициализировать ее как коллекцию класса-потомка?
Т.е. можно ли сделать так:
Поскольку собеседование было устным, а ранее я не задавался вопросом о возможности такого подхода, я пошел методом аналогий. Восходящее преобразование возможно? Возможно:
Заполнить generic-коллекцию класса-предка объектами класса-потомка таким образом вручную возможно? Возможно:
Не видя никаких преград на пути разработчиков Java, я ответил, что это возможно. Как вы уже догадались, неверно. Так делать нельзя:
Альтернатива, которую нам предлагают, довольна неуклюжая:
Вопрос, что же помешало разработчикам сделать более короткую запись, т.е. автоматическое "восходящее преобразование generic коллекций"? Лежит же на поверхности...