Непонимание неограниченного подстановочного знака Java

Допустим, я определяю набор параметризованных типов следующим образом:

Deque<Node<Integer>> nodes = new LinkedList<>();

nodes.add(new Node(5));

Почему ошибочно передавать эту ссылку методу с неограниченным подстановочным знаком в сигнатуре, например:

static void printNodes(Collection<Node<?>> nodes) {...} 

person Node1895    schedule 05.07.2018    source источник
comment
Вы также должны указать на ошибку.   -  person NiVeR    schedule 05.07.2018
comment
Поскольку дженерики инвариантны, см.: stackoverflow.com/q/2745265. Вам нужно изменить тип параметра на Collection<? extends Node<?>>   -  person Jorn Vernee    schedule 05.07.2018
comment
Вы можете добавить Node<String> к Collection<Node<?>>, чтобы Collection<Node<Integer>> не было Collection<Node<?>>.   -  person Andy Turner    schedule 05.07.2018