05
Янв
2018

Variable used in lambda should be final or effectively final

Есть код:

while (true) {
    int i = 0;
    while (i++ < ...) {
        int curr = i;
        futures.add(executor.submit(() -> {
             someMethod(curr);
        }));
    }
}

который отлично компилируется и работает. Однако, если убрать локальную переменную curr:

while (true) {
    int i = 0;
    while (i++ < ...) {
        futures.add(executor.submit(() -> {
             someMethod(i);
        }));
    }
}

компилятор выдаёт ошибку: "variable used in lambda should be final or effectively final". Можно ли как-нибудь обойти это ограничение, не создавая лишнюю локальную переменную (curr), или же это невозможно?

Источник: https://ru.stackoverflow.com/questions/766897/variable-used-in-lambda-should-be-final-or-effectively-final

Тебе может это понравится...

Добавить комментарий