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는 이런 것을 알리고자 에러로 알려주는것 같다