Как компилятор может ссылаться на свой собственный вывод - PullRequest
1 голос
/ 11 марта 2019

«foreach» - это ключевое слово языка Java, и когда компилятор встречает это ключевое слово в источнике, он знает, что коллекция, следующая за этим ключевым словом, должна реализовывать «итеративный» интерфейс.«Итерируемый» интерфейс сам по себе является частью скомпилированного кода Java, так как компилятор может ссылаться на свой собственный вывод, как компилятор может зависеть от своего собственного вывода?

Подумайте о гипотетической точке в прошлом, когдаявляется только компилятором Java (возможно, написанным на C или C ++), а среда Java еще не скомпилирована.Пакет Java.lang и все остальное в нем еще не скомпилировано, поэтому на данный момент нет интерфейса Iterable.Компилятор Java скомпилирует исходный код для пакета Java.lang из исходного кода и создаст байт-код для итерируемого интерфейса в будущем.На тот момент каким-то образом Java-компилятор должен был знать об итерируемом интерфейсе (поскольку он является частью спецификации языка), чтобы он мог компилировать исходный код, который использует итератор foreach.Как это стало возможным?

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