问题
我正在进行Android编程并且正在学习Intents,当我看到一个构造函数时,对我的C#训练有素的思想,看起来很时髦。电话是:
Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
这两个参数对我来说都是新的。如何从类名中删除静态".this"?这是Java的东西还是Android的东西?我假设它只是说"this",因为我在CurrentActivity
的上下文中,但我不知道怎么可以从类名本身调用"this"。也。 ".class"看起来像是用于反射,我在C#中很熟悉,但对此的任何见解也会受到欢迎。
谢谢。
#1 热门回答(127 赞)
通常,你只能使用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);
}
});
#2 热门回答(57 赞)
一次一个:
第一个构造称为aqualified this。语法的目的是在你处于内部类(通常是匿名内部类)的情况下,并且你想要引用外部类的this
而不是(匿名)内部类的this
。 "合格的"只能在this
不明确的情况下使用。引用JLS"如果表达式出现在类或接口中,而不是类T或T本身的内部类,则为编译时错误"。
第二个构造称为aclass literal
,是引用表示该类型的Class对象的方法。它可以在任何上下文中使用。
#3 热门回答(13 赞)
语法"Classname.this"适用于内部类。如果要引用类型为"Outerclass"的封闭实例,则将其设置为"Outerclass.this"。
NextActivity.class只是描述类"NextActivity"的Class对象。