8

如果我有

[编辑:添加了“内部”的类型定义]

interface Inner{
    public void execute();
}

class Outer{
    int outerInt;
    public void hello(){
        Inner inner = new Inner(){
            public void execute(){
                outerInt=5;
            }
        }

        //later
        inner.execute();
    }
}

是否将调用将该特定对象的变量inner.execute()设置为,无论从何处调用它,只要该对象存在?或者它只会更改变量的副本而不影响原始对象?outerInt Outer5InnerouterIntOuter

4

4 回答 4

6

这将捕获并修改外部this.

规格

于 2011-12-21T01:02:19.060 回答
4

要回答您新澄清的问题(从评论到我的其他答案):

的。
所有内部类和本地类都将引用其父类this,即使它们从不使用它。
演示

于 2011-12-21T13:17:21.263 回答
0

这不一定是真的。您没有显示的是 Inner 的类声明。如果 Inner 有一个名为 outerInt 的字段,那么该字段将被修改。否则 Outer 的 outerInt 会。如果你运行:

public class Outer {

    int outerInt = 0;

    public void hello() {
        Inner inner = new Inner() {
            @Override
            public void execute() {
                outerInt = 5;
            }
        };

        // later
        inner.execute();
        System.out.println(outerInt);
    }

    public static void main(String[] args) {
        Outer o = new Outer();
        o.hello();
    }
}

class Inner {
    int outerInt;

    public void execute() {

    }
}

你会得到 0,而不是 5。

但是通过在 Inner 中注释掉 outerInt,你会得到 5

于 2011-12-21T01:59:03.227 回答
0

是的,它确实。但是如果你需要使用外部类的实例,例如传递给某个方法,你必须说Outer.this。

于 2011-12-25T21:15:04.757 回答