Основы Java - Где происходят реализации? - PullRequest
1 голос
/ 28 августа 2010

Например, метод возвращает объект типа List.

public List<Foo> bojangles ()
...

Какой-то фрагмент кода вызывает метод FooBar.bojangles.iterator ();

Я новичок вJava, но из того, что я могу сказать. List - это интерфейс, поэтому метод итератора должен быть реализован где-то еще.При поиске исходного кода для Java.Util и это именно то, что я нашел, интерфейс.Итератор сам по себе является интерфейсом ... так что где-то, я предполагаю, что есть вызываемые классы или абстрактные классы, которые на самом деле имеют логику для этих методов: next () и hasNext ().Но где?

Ответы [ 3 ]

3 голосов
/ 28 августа 2010

Взгляните на javadoc для Списка .Это дает список известных реализующих классов.Каждый из этих классов должен реализовывать метод iterator ().

Если вы покопаетесь в исходном коде этих классов, вы обнаружите, что они обычно реализуют интерфейс Iterator в частном вложенном классе.

2 голосов
/ 28 августа 2010

Сначала ваш вопрос смутил меня, но я думаю, что вы хотели сказать FooBar.bojangles().iterator(). Это имело бы больше смысла (обратите внимание на добавленные скобки).

Метод bojangles() возвращает объект, который реализует List. Например, это может быть ArrayList или LinkedList.

При вызове метода iterator() в любом из этих списков вы получите Iterator. Этот Iterator был создан во внутреннем классе SimpleListIterator AbstractList (это фактический исходный код, и в нем вы найдете нужные реализации).

Итак, вызывая метод iterator(), вы, скорее всего, получите SimpleListIterator. Хотя это может быть не во всех случаях, в большинстве случаев это будет так.

2 голосов
/ 28 августа 2010

Конкретный класс делает реальную работу.

В Eclipse вы можете запустить режим debug : шаг за шагом запускайте код и смотрите представление «Переменные». Тогда вы сможете найти, что именно происходит во время выполнения.

Или вы можете распечатать getClass () списка в консоль, а затем проверить источник.

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