У меня есть ученик, изучающий экзамен по Java 7 OCP, и он представил мне эту проблему. И он, и я понимаю, что локальная переменная не может использоваться в пределах внутреннего класса метода, если только это не окончательный, но он подарил мне на следующий код, который работает просто отлично:Локальная переменная не может использоваться внутри внутреннего класса. Так почему же этот код работает?
public class TestC195 {
public static void main(String[] args) {
TestC195 myObject = new TestC195();
myObject.doStuff();
}
private String x = "Outer 2";
void doStuff() {
String z = "local";
class myInner {
public void seeOuter() {
System.out.println("outer: " + x);
System.out.println("outer: " + z);
}
}
myInner in = new myInner();
in.seeOuter();
}
}
Выход есть:
outer: Outer 2
outer: local
Так что же мы оба упускаем?
Это [член класса] (https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) , – Maroun
Возможно, вы компилируете с Java 8, где правило немного изменяется: переменная должна быть только «эффективной» окончательной. –