我在系统的代码中注意到有人实例化了一个匿名类,如下所示
Class ExampleClass{
MyObj obj;
methodA(new ClassA(){
@override public void innerMethodA(){
//code...
}
});
}
到目前为止一切顺利 现在,为了使用在方法之前声明的obj,我通常将其定义为final 我真的不明白为什么,但我这样做,因为编译器要求。 在这段代码中,我在innerMethodA()中看到了
的用法 ExampleClass.this.obj()
没有最终结果。
我的问题:
1.当我使用obj时,为什么必须进行最终决定?
2.什么是ExampleClass.this?请注意,ExampleClass是Class而不是实例。什么是“这个”?如果它有几个实例?
3.如果我在内部方法运行时更改obj会发生什么(在我的代码内部方法中循环运行,所以我打算更改它。它会爆炸吗?)
答案 0 :(得分:5)
final
...而不是封闭类的实例变量。ExampleClass.this
是对与ExampleClass
的子类实例关联的ClassA
实例的引用。在您的情况下,它与this
中的methodA
相同。obj
的值。可以将其视为捕获ExampleClass.this
的值(因此您无法更改),但您可以更改<{em> 中引用的对象中的数据 {{ 1}}。答案 1 :(得分:1)
答案 2 :(得分:0)
因为,你描述它的方式,在这种情况下,他们没有使用ExampleClass.this.obj,他们正在调用方法ExampleClass.this.obj()。
ExampleClass.this引用ExampleClass的封装实例,其中实例化了这个ClassA实例。
不一定。