将“this”与类名一起使用
我正在做Android编程,并且正在学习Intents,当我看到一个构造函数,对我的C#训练的头脑,似乎很时髦。 电话是:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
这两个参数对我来说都是新的。 如何从一个类名称静态“.this”? 这是一个Java的东西或Android的东西? 我假设它只是说“this”,因为我在CurrentActivity
的上下文中,但是我不知道如何从类名称本身中调用“this”。 也。 “.class”看起来像是用于reflection,这在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
含糊不清的情况下使用。 引用JLS“如果expression式出现在不是类T或T本身的内部类的类或接口中,则是编译时错误”。
第二个构造被称为class literal
是引用表示该types的Class对象的方式。 它可以在任何情况下使用。
“Classname.this”语法适用于内部类。 如果你想引用封闭的“Outerclass”types的实例,那么你把它作为“Outerclass.this”。
NextActivity.class只是描述类“NextActivity”的Class对象。
java中的NextActivity.class
表示C#中的typeof(NextActivity)
ClassName.this
用于从内部类引用外部类的当前实例。
<ClassName>.this
用于嵌套类来引用封闭类的当前实例,因为`this'关键字引用了嵌套类实例。
公开课Siht { class NestedSiht { void demoThis(){ System.err.println(“this' is an instance of: " + this.getClass().getName()); System.err.println("
this' is an instance of: " + this.getClass().getName()); 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
在实例方法或构造函数中, 这是对当前对象的引用 – 调用方法或构造函数的对象。 您可以通过使用此方法从实例方法或构造函数中引用当前对象的任何成员。
这只是语法上特有的。