首页 > 解决方案 > 从匿名内部类修改局部变量

问题描述

我发现我们不能从内部类修改局部变量,因为它被定义为 final。在阅读时,我发现我们必须将其标记为 final,这样它就不会产生任何值不匹配的问题。但是如果我们真的想从内部类修改局部变量怎么办。有什么解决办法吗?

标签: javainner-classesanonymous-class

解决方案


您不能修改局部变量。但如果局部变量是对象引用,则可以修改它所引用的对象。例如:

public static void main(String[] args) {
    final AtomicReference<String> value = new AtomicReference<String>("hello");

    System.out.println(value); // prints "hello"

    new Runnable() {
        public void run() { value.set("goodbye"); }
    }.run();

    System.out.println(value); // prints "goodbye"
}

推荐阅读