web-dev-qa-db-ja.com

クラス名で「this」を使用する

私はAndroidプログラミングをしていて、インテントについて学んでいたときに、C#の訓練を受けた人にとってはファンキーだと思えるコンストラクタを見つけました。

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

両方のパラメーターは私にとって新しいものです。クラス名の静的な「.this」はどのようにありますか?これはJavaの事ですか、それともAndroidの事ですか?私はそれが「これ」と言っているのと同じだと仮定しています。 CurrentActivityですが、クラス名自体から「this」を呼び出す方法がわかりません。また、「。class」はリフレクションに使用されているように見えますが、C#でよく知っています。 、しかし、これについての洞察も歓迎されます。

ありがとう。

112
skaz

通常、使用できるのはthisのみです。しかし、時にはthisが内部クラスを参照することがあります...

Button button = (Button)findViewById(R.id.ticket_details_sell_ticket);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // it will be wrong to use only "this", because it would
        // reference the just created OnClickListener object
        Intent login = new Intent(ClassName.this, Login.class);
        startActivityForResult(login, LOGIN_REQUEST);
    }
});
134
Cristian

一つずつ:

最初の構成は、 修飾されたthis と呼ばれます。構文の目的は、内部クラス(通常は匿名の内部クラス)にいて、外部クラスのthisではなく外部クラスのthisを参照する場合です。 (匿名)内部クラス。 「修飾されたthis」は、thisがあいまいになるコンテキストでのみ使用できます。 JLSの引用は、「式がクラスTまたはT自体の内部クラスではないクラスまたはインターフェースで発生する場合、コンパイル時エラーです」。

2番目の構造はclass literalと呼ばれ、そのタイプを表すClassオブジェクトを参照する方法です。任意のコンテキストで使用できます。

59
Yishai

構文「Classname.this」は内部クラス用です。タイプが「Outerclass」の囲むインスタンスを参照する場合は、「Outerclass.this」として実行します。

NextActivity.classは、クラス「NextActivity」を記述する単なるClassオブジェクトです。

13
DJClayworth

_NextActivity.class_ in JavaはC#のtypeof(NextActivity)を意味する

11
codymanix

ClassName.thisは、内部クラスから外部クラスの現在のインスタンスを参照するために使用されます。

8
akf
<ClassName>.this

「this」キーワードはネストクラスインスタンスを参照するため、ネストクラスで現在のインスタンスを参照するためにネストクラスで使用されます。

 public class Siht {
 class NestedSiht {
 void demoThis(){
 System.err.println( "this' is an instance of: " + 
                            this.getClass().getName());
            System.err.println("Siht.this 'は次のインスタンスです: "+ 
 Siht.this.getClass()。getName()); 
} 
} 
 
void demoThis() {
    new Java.lang.Object() {
        void demoThis() {
            System.err.println("`this' is an instance of: " + 
                            this.getClass().getName());
            System.err.println("`Siht.this' is an instance of: " +
                            Siht.this.getClass().getName());
        }
    }.demoThis();
    new NestedSiht().demoThis();
}

public static void main(String [] args) {
    new Siht().demoThis();
}

}
4
khachik

MainActivity.this」を使用すると、オブジェクトではなくクラスを参照しているように見えるため、混乱を招くだけです。実際には、「this」を使用するときは、Java seドキュメントの状態が示すように、常に現在のオブジェクトを参照しています。

https://docs.Oracle.com/javase/tutorial/Java/javaOO/thiskey.html

インスタンスメソッドまたはコンストラクター内では、thisは現在のobjecへの参照ですt —メソッドまたはコンストラクターが呼び出されるオブジェクト。これを使用して、インスタンスメソッドまたはコンストラクター内から現在のオブジェクトの任意のメンバーを参照できます。

構文的に独特です。

0
Gaetano