0

いくつかのソースコードでこのパターンに出くわしました:

public abstract class Foo {

    void doSomething(){
        System.out.println("...");
    }

    private class FooBar extends Foo{
        void doAnything(){
            Foo.this.doSomething();
        }
    }
}

の意義は何ですか

Foo.this.doSomething();

それとも貨物カルトの慣習ですか?

4

4 に答える 4

2

あなたが与える例では、これはdoSomething();直接呼び出すことと同等です。

ただし、クラスで同じメソッドを宣言した場合、void doSomething()このFooBar表記法を使用して、内部ではなく外部クラスのメソッドを呼び出すことを示します。

後者の場合this.doSomething()は十分ではありません。これはまだ のthisメンバー変数を指しFooBarます。そのため、メソッドを呼び出すクラスを具体的に指定します。

于 2013-08-11T15:48:33.410 に答える
2

Foo.this常に内部クラスのオブジェクトにバインドされている外部クラス Foo のオブジェクト インスタンスを参照します。

Foo がインスタンス化されると、Foo と FooBar は常に一緒にインスタンス化されると考えることができます。

あなたの場合は必要ありませんが、内部の Foo.Bar からそれを必要とするメソッドに Foo オブジェクトのインスタンスを渡す必要がある場合は、次のようにします。

// some method of some other class (OtherClass.java)
void someFunction( Foo foo )...

// ...
private class FooBar extends Foo{
    void doAnything(){
        otherClass.someFunction( Foo.this );
    }
}
于 2013-08-11T15:49:06.660 に答える