Пожалуйста, кто-нибудь, объясните мне, почему?
В общем, вы не можете добавлять элементы из PriorityQueue<?>
в List<?>
, потому что очередь может быть PriorityQueue<String>
и список может быть List<Integer>
.
Компилятор не «запоминает», что параметр типа одинаков в обоих случаях, если только вы не создадите переменную типа, чтобы сказать, что они являются то же самое.
и как это исправить.
Вы знаете, как это исправить: используйте переменную типа, как в первом примере кода.
Если вы имеете в виду, как не иметь переменную типа в сигнатуре метода, вы можете делегировать закрытому методу:
public void heapSort(List<?> elements) {
heapSortPrivate(elements);
}
private <T> void heapSortPrivate(List<T> elements){
PriorityQueue<T> q = new PriorityQueue<>(elements);
elements.clear();
while (!q.isEmpty()){
elements.add(q.poll());
}
}