繁体   English   中英

内部类的非最终变量:应该由编译器自动修复?

[英]Non final variable from inner class : should be automatically fixed by compiler?

当我使用内部类的非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);
}

例如,编译器可以轻松地自动化添加临时最终变量的过程。

我的问题是:为什么编译器不会自动执行允许我们摆脱此错误的简单更改?

编译器不能用常量替换对局部变量的所有引用,但是当构造内部类的实例时,该值将传递给适当的构造函数并存储在变量中。 根据需要,自动实现它很麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM