Effectively final

유시현·2023년 10월 26일
0

Java

목록 보기
2/2
public class OuterClass {
    public void someMethod() {
        int x = 10;
        
        class InnerClass {
            public void printValue() {
                // 아래 줄에서 x 변수를 참조하면 "must be final or effectively final" 에러 발생
                System.out.println(x);
            }
        }
        
        InnerClass inner = new InnerClass();
        inner.printValue();
    }
}

위 코드에서 x는 컴파일러가 컴파일하는 과정에서 final로 취급함. 따라서 System.out.println(x) 가능

public class OuterClass {
    public void someMethod() {
        int x = 10;
        x=20;
        class InnerClass {
            public void printValue() {
                // 아래 줄에서 x 변수를 참조하면 "must be final or effectively final" 에러 발생
                System.out.println(x);
            }
        }
        
        InnerClass inner = new InnerClass();
        inner.printValue();
    }
}

이경우는

Variable 'x' is accessed from within inner class, needs to be final or effectively final

이런 에러가 나오는데 x=20으로 한번 바뀌었기 때문에 Effectively final로 취급하지 않는다.

하위클래스에서 상위클래스의 변수를 참조할때 그 변수가 만약 언제든지 변할 수 있다면 개발자가 생각하는대로 코드를 짜는게 거의 불가능? 할것이다. IDE는 이런 것을 알리고자 에러로 알려주는것 같다

profile
안드로이드 ,ios 공부하고 있습니다

0개의 댓글