在类名中使用“ this”

我正在做 Android 编程,正在学习意图,这时我看到了一个构造函数,在我受过 C # 训练的头脑中,它看起来很古怪。电话是:

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

这两个参数对我来说都是新的。怎么会有静电干扰”。这个“从一个类名称?这是 Java 的东西还是 Android 的东西?我假设这和说“ this”是一样的,因为我是在 CurrentActivity的上下文中,但是我不明白“ this”怎么可以从类名本身中调用。还有。「。“ class”看起来像是用于反射的,我在 C # 中对此很熟悉,但是对此的任何深入了解也会受到欢迎。

谢谢。

33870 次浏览

ClassName.this用于从内部类引用外部类的当前实例。

语法“ Classname.this”用于内部类。如果您希望引用类型为“ Outterclass”的封闭实例,那么可以将其称为“ Outterclass.this”。

Class 只是描述类“ NextActivity”的 Class 对象。

Java 中的 NextActivity.class在 C # 中表示 typeof(NextActivity)

通常,您只能使用 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);
}
});

One at a time:

第一个构造称为 有资格这样做。这个语法的用途是在这样的情况下: 您处于一个内部类(通常是一个匿名内部类)中,并且您希望引用外部类的 this,而不是(匿名)内部类的 this。“限定的 this”只能在 this不明确的上下文中使用。引用 JLS“如果表达式出现在一个类或接口中,而这个类或接口本身不是类 T 或 T 的内部类,那么这就是一个编译时错误”。

第二个构造称为 class literal,它是引用表示该类型的 Class 对象的方法。它可以在任何上下文中使用。

<ClassName>.this

在嵌套类中用于引用封闭类的当前实例,因为“ this”关键字引用嵌套类实例。

公共班级
类 NestedSight {
void demoThis() {
Println (”< code > this’是: “ + 的一个实例
GetClass () . getName () ;
Println (” 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();
}

}

It's confusing only because when you use "主要活动,这个", it seems that you are referring to the class and not the object. 实际上,当你使用“ this”时,你总是指的是当前对象, 正如 java se 文档所述:

Https://docs.oracle.com/javase/tutorial/java/javaoo/thiskey.html

在实例方法或构造函数中,这个是一个引用 到当前对象t ーー调用其方法或构造函数的对象。可以使用以下命令从实例方法或构造函数中引用当前对象的任何成员。

It's just syntactically peculiar.