Ale*_*nde 2 java anonymous-class
我试图更好地理解Java中匿名类的概念.从本网站的其他答案中,我了解到匿名类可以使用包含类的非最终字段OuterClass.this.myField.
我使用接口创建了以下简单的测试用例AnonInt,以及AnonTest带有foo返回实现的匿名类实例的方法的类AnonInt.Dspite我正在使用System.out.println(a)而不是System.out.println(AnonTest.this.a)代码工作并打印正确的结果.怎么会这样?
public interface AnonInt {
void print();
}
public class AnonTest {
private int a;
public AnonTest(int a) {
this.a = a;
}
public AnonInt foo() {
return new AnonInt() {
public void print() {
System.out.println(a);
}
};
}
public static void main(String[] args) {
AnonTest at = new AnonTest(37);
AnonInt ai = at.foo();
ai.print();
}
}
Run Code Online (Sandbox Code Playgroud)
尽管我正在使用
System.out.println(a)而不是System.out.println(AnonTest.this.a)代码工作并打印正确的结果.怎么会这样?
由于引用a在您的上下文中是明确的,因此这两个表达式引用相同的字段.
通常,AnonTest.this在非常特定的上下文中需要 - 当您的方法需要访问AnonTest对象本身而不是访问其中一个成员时.对于您的程序,这是不必要的:编译器将表达式解析a为对象AnonTest.this.a,并将其传递给System.out.println.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |