当我使用内部类的非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);
}
例如,编译器可以很容易地自动化添加临时最终变量的过程。
我的问题是:为什么编译器不会自动执行允许我们摆脱此错误的简单更改?
答案 0 :(得分:0)
编译器不能用常量替换对局部变量的所有引用,但是当构造内部类的实例时,该值将传递给适当的构造函数并存储在变量中。 根据需要,自动实现它很麻烦。