gpt4 book ai didi

java - 一般匿名类实例化问题

转载 作者:行者123 更新时间:2023-12-01 16:39:14 24 4
gpt4 key购买 nike


我注意到在我系统的代码中有人实例化了一个匿名类,如下

 Class ExampleClass{

MyObj obj;

methodA(new ClassA(){
@override public void innerMethodA(){
//code...
}
});
}

到目前为止一切顺利。
现在,为了使用在方法之前声明的 obj,我通常将其定义为 Final。
我不太明白为什么,但我明白,因为编译器会问。在此代码中,我在 innerMethodA() 中看到

的用法
 ExampleClass.this.obj()

没有最后的。

我的问题:
1. 为什么我使用obj的时候一定要加上final?
2.ExampleClass.this是什么?请注意,ExampleClass 是类而不是实例。那么“这个”又是什么呢?如果它有多个实例?
3.如果我在内部方法运行时更改 obj 会发生什么(在我的代码中,内部方法在循环中运行,因此我计划更改它。它会爆炸吗?)

最佳答案

  • 当您捕获本地变量的变量...而不是封闭类的实例变量时,您必须使用final
  • ExampleClass.this 是对与 ClassA 子类实例关联的 ExampleClass 实例的引用。在您的情况下,它将与 methodA 中的 this 相同。
  • 它不会爆炸 - 它只会改变 obj 的值。将其视为捕获 ExampleClass.this(因此您无法更改它),但您可以更改对象的数据由 ExampleClass.this 引用。

关于java - 一般匿名类实例化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com