使用带有类名的“this”

时间:2010-11-02 18:23:24

标签: java android this

我正在进行Android编程并且正在学习Intents,当我看到一个构造函数时,对我的C#训练有素的思想,看起来很时髦。电话是:

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

这两个参数对我来说都是新的。如何从班级名称中删除静态“.this”?这是Java的东西还是Android的东西?我假设它与仅仅说“this”是一样的,因为我在CurrentActivity的上下文中,但我不知道如何从类名本身调用“this”。也。 “.class”看起来像是用于反射,我在C#中很熟悉,但对此的任何见解都会受到欢迎。

感谢。

7 个答案:

答案 0 :(得分:131)

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

答案 1 :(得分:59)

一次一个:

第一个构造称为qualified this。语法的目的是在您处于内部类(通常是匿名内部类)的情况下,并且您想要引用外部类的this而不是this的(匿名) )内心阶级。 “限定条件”只能用于this不明确的上下文中。引用JLS“如果表达式出现在类或接口中,而不是类T或T本身的内部类,那么这是一个编译时错误。”

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

答案 2 :(得分:13)

语法“Classname.this”适用于内部类。如果你想引用类型为“Outerclass”的封闭实例,那么你可以将其作为“Outerclass.this”。

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

答案 3 :(得分:11)

java中的

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

答案 4 :(得分:8)

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

答案 5 :(得分:3)

<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' is an instance of: " +
                            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();
}

}

答案 6 :(得分:0)

令人困惑的只是因为当你使用“ MainActivity.this ”时,似乎你指的是类而不是对象。 实际上当你使用“this”时,你总是指的是当前的对象, 正如java se文档所述:

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

  

在实例方法或构造函数中, this 是对当前objec t的引用 - 正在调用其方法或构造函数的对象。您可以使用此方法在实例方法或构造函数中引用当前对象的任何成员。

这只是语法上的特殊。