Объявление итератора в Java - PullRequest
6 голосов
/ 18 ноября 2011

Я очень озадачен итератором в Java.

В учебном пособии было сказано следующее:

В языке программирования Java интерфейс является ссылочным типом,похож на класс, который может содержать только константы, сигнатуры методов и вложенные типы.Нет методов тел.Интерфейсы не могут быть созданы - они могут быть реализованы только классами или расширены другими интерфейсами.Расширение обсуждается позже в этом уроке.

Затем я увидел другое руководство с этим:

Iterator<String> flavoursIter = aFlavours.iterator();

Я понимаю, что aFlavours унаследовал функции итератора, которые возвращают интерфейс итератора.Я просто не понимаю, что на самом деле происходит в этой линии.Я думал, что вы не можете создать экземпляр?

Может быть, я не имею смысла, но, пожалуйста, скажите мне, что я схожу с трассы.

Ответы [ 5 ]

7 голосов
/ 18 ноября 2011

Говоря, что это невозможно создать, они означают, что вы не можете сделать Iterator i = new Iterator();. Поскольку Iterator является интерфейсом, он сам по себе не имеет реализации. Когда вы делаете

Iterator flavoursIter = aFlavours.iterator();

то, что вы делаете, вызывает метод "iterator" для объекта aFlavours, который возвращает экземпляр некоторого класса, который реализует интерфейс Iterator (вы на самом деле не знаете, какой это точный класс, и вы не должны все, что вам гарантировано, это то, что он поддерживает все методы, определенные в интерфейсе Итератора).

1 голос
/ 18 ноября 2011

Как дополнение к другим ответам:

Многие классы реализуют интерфейсы, такие как Iterator, как закрытый внутренний класс, а затем возвращают экземпляры этого скрытого класса всякий раз, когда запрашивается экземпляр.Вы можете прочитать исходный код платформы Collections, если вам нужен пример.

Основным преимуществом таких действий является то, что вы скрываете детали реализации.Например, пользователь List не обязан знать, какой конкретный класс возвращается при вызове someList.iterator (), и при этом ему не нужно знать, сколько различных реализаций Iteraor доступно в платформе Collections.Это позволяет разработчикам этой платформы создавать столько реализаций, сколько необходимо, исходя из их потребностей (конкретность, эффективность и т. Д.), И вам, как пользователю этой среды, не нужно изучать миллионы классов.

0 голосов
/ 18 ноября 2011

Kick, Когда мы вызываем метод iterator (). Он возвращает экземпляр Iterator.for пример

public Iterator iterator() {
    return new ArryListIterator implments Iterator {
         public T next() { // code for next() }
         public boolean hasNext() {//code for hashNext()}
         //others codes

      }

}

итак. Знаете ли вы, что произошло, когда мы это назвали.

0 голосов
/ 18 ноября 2011

Ты прав. Iterator - это interface и, следовательно, его нельзя напрямую создать. Однако вы можете создать и создать экземпляр реализации класса Iterator.

По сути, классы, которые имеют метод iterator(), написали свои собственные реализации интерфейса Iterator. iterator() создает и возвращает реализацию Iterator.

0 голосов
/ 18 ноября 2011

Вы не можете создать объект Iterator, но вы можете создать объект, который реализует интерфейс Iterator. Использование Iterator flavoursIter означает, что вам все равно, какая реализация.

...