오류관리

Variable used in lambda expression should be final or effectively final

k9e4h 2021. 6. 9. 14:46

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

 

반응형