Мне, должно быть, что-то не хватает.
В Java 5 был введен оператор "for-each loop" (также называемый расширенным циклом). Похоже, что он был введен в основном для итерации через подборки. Любой класс коллекции (или контейнера), который реализует интерфейс Iterable
, имеет право на итерацию, используя цикл for for each. Возможно, по историческим причинам массивы Java не реализовали интерфейс Iterable. Но поскольку массивы были/повсеместны, javac
согласился бы использовать цикл for для каждого цикла на массивах (генерируя байт-код, эквивалентный традиционному циклу).
Существуют ли технические причины, по которым javac не может быть расширен, чтобы принимать массивы в forEach, так же как он принимает их в расширенном цикле? Похоже, что генерация кода возможна, не требуя реализации массивов Iterable
. Я наивна?
Это особенно важно для новичков на языке, который скорее использует массивы из-за их синтаксической легкости. Слишком естественно переключиться на Списки и использовать Arrays.asList(1, 2, 3)
.