一般匿名类实例化问题
我注意到在我系统的代码中有人实例化了一个匿名类,如下所示
Class ExampleClass{
MyObj obj;
methodA(new ClassA(){
@override public void innerMethodA(){
//code...
}
});
}
到目前为止一切顺利。
现在,为了使用在方法之前声明的 obj,我通常将其定义为 Final。
我不太明白为什么,但我明白,因为编译器会问。 在这段代码中,我在innerMethodA()中看到了不带final的用法
ExampleClass.this.obj()
。
我的问题:
1. 为什么我使用obj的时候一定要加上final?
2.ExampleClass.this是什么?请注意,ExampleClass 是类而不是实例。那么“这个”又是什么呢?如果它有多个实例?
3.如果我在内部方法运行时更改 obj 会发生什么(在我的代码中,内部方法在循环中运行,因此我计划更改它。它会爆炸吗?)
I have noticed in the code in my system that someone instantiated an anonymous class as follows
Class ExampleClass{
MyObj obj;
methodA(new ClassA(){
@override public void innerMethodA(){
//code...
}
});
}
So far so good.
Now, in order to use obj that was declared before the method I usually define it as final.
I don't really understand why but i do because the compiler asks.
In this code i see in innerMethodA() the usage of
ExampleClass.this.obj()
without final.
My questions :
1. why do I have to put final when I use obj?
2. what is ExampleClass.this ? Notice that ExampleClass is the Class not an instance. then what is the "this"? if it has several instances?
3. What happens if I change the obj while the inner method runs (in my code inner method runs in a loop so I plan on changing it . will it explode?)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
final
。ExampleClass.this
是对与ClassA
子类实例关联的ExampleClass
实例的引用。在您的情况下,它将与methodA
中的this
相同。ExampleClass.this
的值(因此您无法更改它),但您可以更改对象内的数据由ExampleClass.this
引用。final
when you capture the variable of a local variable... not an instance variable of the enclosing class.ExampleClass.this
is a reference to the instance ofExampleClass
associated with the instance of the subclass ofClassA
. In your case, it will be the same asthis
withinmethodA
.obj
. Think of it as capturing the value ofExampleClass.this
(so you can't change that) but you can change the data within the object referred to byExampleClass.this
.因为,按照您描述的方式,在这种情况下,他们没有使用ExampleClass.this.obj,而是调用ExampleClass.this.obj()方法。
ExampleClass.this 指的是实例化此 ClassA 实例的ExampleClass 的封装实例。
不一定。
Because, the way you described it, in this case, they are not using ExampleClass.this.obj, they are calling the method ExampleClass.this.obj().
ExampleClass.this refers to the encapsulating instance of ExampleClass in which this ClassA instance is instantiated.
Not necessarily.