使用内部类时,如果使用非 final 变量,会出现编译错误:
然而,我可以通过添加一个虚拟的最终变量
public static void main(String[] args) {
String s = "hello";
s += "world";
Object myObj = new Object() {
public String toString() {
return s; // compile error
}
};
System.out.println(myObj);
}
然而,我可以通过添加一个虚拟的最终变量
tmp
来解决这个问题,它引用了我想要访问的另一个变量。public static void main(String[] args) {
String s = "hello";
s += "world";
final String tmp = s;
Object myObj = new Object() {
public String toString() {
return tmp; // that works!
}
};
System.out.println(myObj);
}
这个添加临时最终变量的过程可以很容易地被自动化,例如通过编译器。
我的问题是:为什么编译器不会自动执行这个简单的更改,让我们摆脱这个错误?