저는 Java 8 스트림을 연구 중이므로 람다를 이해하는 것이 람다에 대한 최종 경고가 무시되는 이유입니다 예를 들어 (그리고 정적 인) 변수들. 나는 대부분의 페이지가 단지 "사실상 최종적인"이라는 정의에 관해서 이야기 할 것이므로, 온라인에 대한 어떤 언급도 찾을 수없는 것 같다.왜 "람다 식에 사용되는 변수가 최종 변수이거나 최종 변수 여야합니다"라는 경고가 인스턴스 변수에 대해 무시됩니다.
public class LambdaTest {
int instanceCounter = 0;
public void method() {
int localCounter = 0;
instanceCounter = 5; //Re-assign instance counter so it is no longer effectively final
Stream.of(1,2,3).forEach(elem -> instanceCounter++); //WHY DOES THE COMPILER NOT COMPLAIN HERE
Stream.of(1,2,3).forEach(elem -> localCounter++); //Does not compile because localCounter is not effectively final
}
}