私はAndroidプログラミングをしていて、インテントについて学んでいたときに、C#の訓練を受けた人にとってはファンキーだと思えるコンストラクタを見つけました。
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
両方のパラメーターは私にとって新しいものです。クラス名の静的な「.this」はどのようにありますか?これはJavaの事ですか、それともAndroidの事ですか?私はそれが「これ」と言っているのと同じだと仮定しています。 CurrentActivity
ですが、クラス名自体から「this」を呼び出す方法がわかりません。また、「。class」はリフレクションに使用されているように見えますが、C#でよく知っています。 、しかし、これについての洞察も歓迎されます。
ありがとう。
通常、使用できるのは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);
}
});
一つずつ:
最初の構成は、 修飾されたthis と呼ばれます。構文の目的は、内部クラス(通常は匿名の内部クラス)にいて、外部クラスのthis
ではなく外部クラスのthis
を参照する場合です。 (匿名)内部クラス。 「修飾されたthis」は、this
があいまいになるコンテキストでのみ使用できます。 JLSの引用は、「式がクラスTまたはT自体の内部クラスではないクラスまたはインターフェースで発生する場合、コンパイル時エラーです」。
2番目の構造はclass literal
と呼ばれ、そのタイプを表すClassオブジェクトを参照する方法です。任意のコンテキストで使用できます。
構文「Classname.this」は内部クラス用です。タイプが「Outerclass」の囲むインスタンスを参照する場合は、「Outerclass.this」として実行します。
NextActivity.classは、クラス「NextActivity」を記述する単なるClassオブジェクトです。
_NextActivity.class
_ in JavaはC#のtypeof(NextActivity)
を意味する
ClassName.this
は、内部クラスから外部クラスの現在のインスタンスを参照するために使用されます。
<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();
}
}
「MainActivity.this」を使用すると、オブジェクトではなくクラスを参照しているように見えるため、混乱を招くだけです。実際には、「this」を使用するときは、Java seドキュメントの状態が示すように、常に現在のオブジェクトを参照しています。
https://docs.Oracle.com/javase/tutorial/Java/javaOO/thiskey.html
インスタンスメソッドまたはコンストラクター内では、thisは現在のobjecへの参照ですt —メソッドまたはコンストラクターが呼び出されるオブジェクト。これを使用して、インスタンスメソッドまたはコンストラクター内から現在のオブジェクトの任意のメンバーを参照できます。
構文的に独特です。