Как указано в комментариях, forEach
- это просто вызов метода.Фрагмент
myLabel: ints.forEach(integer -> ...);
представляет собой помеченный оператор :
метки операторов идентификатора используются с break
или continue
операторами (§14.15, §14.16) появляется в любом месте внутри помеченного оператора.
Повторим, помеченный оператор является выражением вызова метода.Ваше заявление continue
не входит в помеченное заявление.
Ваш оператор continue
находится внутри оператора while
, появляющегося в теле лямбда-выражения.
Оператор continue
с меткой Identifier
пытается передать управление во вложенную маркированную инструкцию (§14.7), которая имеет тот же Identifier
, что и его метка;этот оператор, который называется целью продолжения, немедленно завершает текущую итерацию и начинает новую.
[...]
Цель продолжения должна быть while
, *Оператор 1033 *, for
или ошибка времени компиляции. Оператор
continue
должен ссылаться на метку внутри непосредственно включающего метода, конструктора, инициализатора или лямбда-тела.Нет нелокальных прыжков. Если ни один помеченный оператор с Identifier
в качестве метки в непосредственно включающем теле метода, конструктора, инициализатора или лямбды не содержит оператора continue, возникает ошибка времени компиляции .
Поскольку в непосредственно включающем теле лямбды-тела нет помеченного (while
, do
или for
) оператора с именем myLabel
, вы получаете ошибку времени компиляции.