问题

我正在进行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对象。


原文链接