Вот пример кода, так как я этого тоже не ожидал, я ожидал, что не смогу изменить что-либо за пределами лямбда
public class LambdaNonFinalExample {
static boolean odd = false;
public static void main(String[] args) throws Exception {
//boolean odd = false; - If declared inside the method then I get the expected "Effectively Final" compile error
runLambda(() -> odd = true);
System.out.println("Odd=" + odd);
}
public static void runLambda(Callable c) throws Exception {
c.call();
}
}
. Вывод: Odd = true
Есть довольно много способов сделать это. Взгляните на документы здесь .