Variable used in lambda expression should be final or effectively final
Variable used in lambda expression should be final or effectively final
람다는 새로운 변수 범위를 생성하지 않습니다. 람다 내에서 변수 사용은 둘러싸고 있는 환경의 변수들을 참조합니다.
익명 클래스의 인스턴스가 필요로 하는 변수 정보나 컨텍스트를 복사해서 넘겨주기 때문입니다.
복사해놓는 것은 마음대로 값을 변경하기 위한 목적이 아니라, 외부 stack에서 사라지는 것을 막고 내부에서 접근할 수 있도록 하기 위함입니다. 변경을 하지 못하도록 막은 것은 여러 thread에서 해당 변수가 사용될 때 sync를 맞추기가 어려워지기 때문이죠.
https://futurecreator.github.io/2018/08/02/java-lambda-variable-scope/
Java Lambda (5) 변수 범위
변수 범위 람다는 새로운 변수 범위를 생성하지 않습니다. 람다 내에서 변수 사용은 둘러싸고 있는 환경의 변수들을 참조합니다. this 나 super 키워드도 마찬가지입니다. 따라서 복잡해지지 않습
futurecreator.github.io
https://frhyme.github.io/java/java_variable_used_in_lambda_expressiond/
Java - Variable used in lambda expression should be final or effectively final
Java - Variable used in lambda expression should be final or effectively final
frhyme.github.io
https://www.baeldung.com/java-lambda-effectively-final-local-variables
Why Do We Need Effectively Final? | Baeldung
Learn why Java requires local variables to be effectively final when used in a lambda.
www.baeldung.com