クラスの現在のインスタンスを参照するためにClassName.this
、(単純なキーワードではなく) オンラインの SO やその他の場所の多くの Android コードで使用されているのを見てきました。あいまいさを取り除くためにクラス名を前にthis
付けることを決定する場合があることは理解していますが、私の経験では、コードが実行されているクラスの現在のインスタンスしか参照できないため、そうする必要がないことがよくあります。キーワードの前にクラス名を付けることが常により良い方法であることを示唆する、私が見落としているものは他にありますか、それとも実際に必要な状況はありますか?this
this
this
4 に答える
内部クラスまたは無名クラスの内部からエンクロージング クラスのインスタンスにアクセスするには、次の構文を使用する必要があります。
EnclosingClass.this.someMethod();
- Java チュートリアル: ネストされたクラスを参照してください。
これが参照するものは 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
の有効な最初のパラメーターではないと不平を言います。インスタンスを囲むインスタンスである を返します。Intent
MyActivity.this
this
MyActivity
Button.OnClickListener
コメントを入れるためのレポがあまりないので、答えとして書き留めます。
質問の基本的な懸念は、開発者が内部クラス呼び出しがないことをすでに知っているシナリオで、「this」キーワードよりも classname.this を使用する利点があるかどうかを確認することだったと思います。
もちろん、内部クラスのシナリオの場合、classname.this を使用してそれを囲むクラスを呼び出す必要があります。しかし、この特定のコードがどの内部クラス内でも呼び出されないことを既に知っているというシナリオが存在する可能性があります。