Почему IntelliJ не может найти мою переопределенную функцию hasNext ()?

#java

Вопрос:

Я думаю, что это должна быть легкая проблема, но я просто не могу ее решить. На самом деле,я изучаю стек с итерацией, когда я пытался реализовать интерфейс Iterable, IDE постоянно предупреждала меня о том, что я не реализовал метод hasNext()

Вот мой код:

 import java.util.Iterator;

public class ResizingArrayStack<Item> implements Iterator<Item>
{
    private Item[] array = (Item[]) new Object[1]; //stores the elements
    private int size = 0;                          //number of the elements

    /*
    Codes that doesn't matter
    */

    //implement iterator()
    public Iterator<Item> iterator()
    {
        return new ReverseArrayIterator();
    }

    private class ReverseArrayIterator implements Iterator<Item>
    {
        private int i = size();

        //I ALREADY IMPLEMENTED IT!
        @Override
        public boolean hasNext()
        {
            return i > 0;
        }
        
        @Override
        public Item next()
        {
            return a[--i];
        }
    }
}
 

И вот что показывает IDE:

Класс «ResizingArrayStack» должен быть либо объявлен абстрактным, либо реализовать абстрактный метод «hasNext ()» в «Итераторе»

Я буду очень признателен, если вы, ребята, сможете ответить на этот вопрос за меня!

Комментарии:

1. Сообщение понятно само по себе, у класса ResizingArrayStack нет next() метода, только у вашего внутреннего ReverseArrayIterator класса он есть.

2. Обратите внимание , что IDE жалуется не ResizingArrayIterator на , а на то ResizingArrayStack , что Iterator в вашем фрагменте нет методов. Вы имели в виду вместо этого реализовать Iterable во внешнем классе стека?

3. Я понимаю, что вы пытаетесь мне показать, но я хочу сделать код более кратким. Я читаю коды отсюда: geeksforgeeks.org/… И обнаружил, что он может поместить методы в класс

Ответ №1:

То, что я написал во внутреннем классе, было правильным, проблема в том, что я должен был быть более строгим при определении класса ResizingArrayStack . Он должен реализовываться Iterable вместо Iterator