我在一些源代码中遇到了这种模式:
public abstract class Foo {
void doSomething(){
System.out.println("...");
}
private class FooBar extends Foo{
void doAnything(){
Foo.this.doSomething();
}
}
}
是什么意思
Foo.this.doSomething();
还是只是一些货物崇拜的做法?
答案 0 :(得分:4)
Foo.this
和this
指的是两个不同的对象。
由于FooBar
是Foo
中定义的内部类,因此FooBar
的每个实例都有一个Foo
实例与之关联。
this
指的是FooBar
实例本身; Foo.this
指的是外部Foo
实例。请参阅How can "this" of the outer class be accessed from an inner class?
也就是说,您展示的示例中的Foo.this.
是多余的,可以省略(除非Foo
和FooBar
都有一个名为doSomething()
的方法。
答案 1 :(得分:2)
在您给出的示例中,这相当于直接调用doSomething();
。
但是,如果您在void doSomething()
类中声明了相同的方法FooBar
,那么您将使用此表示法来表示您调用外部类的方法而不是内部类。
在后一种情况下this.doSomething()
是不够的,这仍然会指向this
的{{1}}成员变量,这就是为什么要专门指定要调用的类的原因方法。
答案 2 :(得分:2)
Foo.this
引用外部类Foo的对象实例,它始终绑定在内部类的对象中。
当Foo被实例化时,你可以认为Foo和FooBar总是在一起实例化。
在你的情况下没有必要,但如果你需要将Foo对象实例传递给内部Foo.Bar中需要它的任何方法,你可以用:
// some method of some other class (OtherClass.java)
void someFunction( Foo foo )...
// ...
private class FooBar extends Foo{
void doAnything(){
otherClass.someFunction( Foo.this );
}
}
答案 3 :(得分:1)
Foo.this
引用外部类对象,其中this
引用当前类对象
根据java docs。它也被称为阴影