如果我有
[编辑:添加了“内部”的类型定义]
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
对象的Outer
变量设置为5
,无论它在何处被调用,并且只要Inner
对象存在?或者它只会更改outerInt
变量的副本而不会影响原始的Outer
对象?
答案 0 :(得分:6)
这将捕获并修改外部this
。
请参阅spec
答案 1 :(得分:3)
回答你新澄清的问题(从评论到我的其他答案):
是即可。
所有内部和本地类都将引用其父级this
,即使他们从未使用它
Demo
答案 2 :(得分:0)
这不一定是真的。你没有展示的是Inner的类声明。如果Inner有一个名为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
答案 3 :(得分:0)
是的。但是如果你需要使用外部类的实例,例如传递给某种方法,你必须说Outer.this。