Java Обобщения: несовместимые типы при использовании итератора - PullRequest
0 голосов
/ 04 февраля 2020

Я пишу тестовый класс для моей реализации c MinPriorityQueue.

Я попытался выполнить итерацию очереди двумя способами (т. Е. Вариант 1 и 2). Вариант 1 работает. Опция 2 выдает ошибку.

Опция 1 :

Iterator<Integer> it = q.iterator();
while(it.hasNext())
      System.out.print(it.next() + " ");

Опция 2 :

for(Integer i : q)
      System.out.print(i + " ");

Вопрос: Почему вариант 2 дает мне следующую ошибку (и как я могу ее исправить)?

main. java: 17: ошибка: несовместимые типы: объект не может быть преобразован в целое для (Integer i: q)

Снимок экрана класса main

Снимок экрана класса MinPriorityQueue

Снимок экрана абстрактного класса PriorityQueue

Редактировать 1: Добавлены скриншоты классов

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Ваш MinPriorityQueue имеет необработанный суперкласс:

... extends PriorityQueue

Таким образом, методы, унаследованные от этого класса (например, iterator()), также будут необработанными.

Создание суперкласса не сырье:

... extends PriorityQueue<E>
0 голосов
/ 04 февраля 2020

Что ж, скорее всего, ваша реализация MinPriorityQueue не реализует интерфейс Iterable<?>, только в этом случае вы можете использовать его в циклах, как пытаетесь сделать в варианте 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...