一般匿名类实例化问题

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会发生什么(在我的代码内部方法中循环运行,所以我打算更改它.它会爆炸吗?)

Jon*_*eet 5

  • final捕获局部变量的变量时必须使用...而不是封闭类的实例变量.
  • ExampleClass.thisExampleClass对与子类实例关联的实例的引用ClassA.在你的情况下,它将与this内部相同methodA.
  • 它不会爆炸 - 它只会改变它的价值obj.把它看成是捕捉ExampleClass.this(所以你不能改变),但你可以改变数据的对象提到了ExampleClass.this.