15

クラスの現在のインスタンスを参照するためにClassName.this、(単純なキーワードではなく) オンラインの SO やその他の場所の多くの Android コードで使用されているのを見てきました。あいまいさを取り除くためにクラス名を前にthis付けることを決定する場合があることは理解していますが、私の経験では、コードが実行されているクラスの現在のインスタンスしか参照できないため、そうする必要がないことがよくあります。キーワードの前にクラス名を付けることが常により良い方法であることを示唆する、私が見落としているものは他にありますか、それとも実際に必要な状況はありますか?thisthisthis

4

4 に答える 4

28

内部クラスまたは無名クラスの内部からエンクロージング クラスのインスタンスにアクセスするには、次の構文を使用する必要があります。

EnclosingClass.this.someMethod();
于 2013-03-29T18:35:27.037 に答える
10

これが参照するものは 1 つだけです。

それは正しくありません。

this キーワードの前にクラス名を付けることが常により良い方法であることを示唆する、私が見落としているものは他にありますか、それとも必要な状況はありますか?

はい、はい、それぞれ。特に、ClassName.thisの外部クラス インスタンスに到達するには、内部クラスから が必要ですthis

例えば:

  myButton.setOnClickListener(new Button.OnClickListener() {  
    public void onClick(View v) {
          startActivity(new Intent(MyActivity.this, MyOtherActivity.class));
        }
     });

ここで、this代わりにを使用MyActivity.thisすると、コンパイル エラーで失敗し、コンストラクターButton.OnClickListenerの有効な最初のパラメーターではないと不平を言います。インスタンスを囲むインスタンスである を返します。IntentMyActivity.thisthisMyActivityButton.OnClickListener

于 2013-03-29T18:38:18.553 に答える
0

コメントを入れるためのレポがあまりないので、答えとして書き留めます。

質問の基本的な懸念は、開発者が内部クラス呼び出しがないことをすでに知っているシナリオで、「this」キーワードよりも classname.this を使用する利点があるかどうかを確認することだったと思います。

もちろん、内部クラスのシナリオの場合、classname.this を使用してそれを囲むクラスを呼び出す必要があります。しかし、この特定のコードがどの内部クラス内でも呼び出されないことを既に知っているというシナリオが存在する可能性があります。

于 2014-10-24T04:27:35.540 に答える