Bic*_*ick 0 java anonymous-class
我在系统的代码中注意到有人实例化了一个匿名类,如下所示
Class ExampleClass{
MyObj obj;
methodA(new ClassA(){
@override public void innerMethodA(){
//code...
}
});
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
现在,为了使用在方法之前声明的obj,我通常将其定义为final.
我真的不明白为什么,但我这样做,因为编译器要求.在这段代码中,我在innerMethodA()中看到了用法
ExampleClass.this.obj()
Run Code Online (Sandbox Code Playgroud)
没有最后的.
我的问题:
1.为什么我在使用obj时必须进行最终决定?
2.什么是ExampleClass.this?请注意,ExampleClass是Class而不是实例.什么是"这个"?如果它有几个实例?
3.如果我在内部方法运行时更改obj会发生什么(在我的代码内部方法中循环运行,所以我打算更改它.它会爆炸吗?)
final捕获局部变量的变量时必须使用...而不是封闭类的实例变量.ExampleClass.this是ExampleClass对与子类实例关联的实例的引用ClassA.在你的情况下,它将与this内部相同methodA.obj.把它看成是捕捉值的ExampleClass.this(所以你不能改变),但你可以改变数据中的对象提到了ExampleClass.this.| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |