“与”的区别是什么;这";及;xxx.这是;在android中

“与”的区别是什么;这";及;xxx.这是;在android中,android,this,Android,This,例如: 为什么我可以这样写MainActivity.this.getContentResolve() 但是不能这样写this.getContentResolve()

例如: 为什么我可以这样写
MainActivity.this.getContentResolve()

但是不能这样写
this.getContentResolve()MainActivity.java

中,如果从活动的任何直接方法调用
getContentResolver()
,则没有区别。您可以同时编写
MainActivity.this.getContentResolver()
this.getContentResolver()
以及简单的
getContentResolver()
,具有相同的效果。在这种情况下,
this
关键字引用MainActivity的当前实例


但是,如果您在MainActivity中的内部类或接口/抽象方法的实现中,则
将引用内部类或您正在实现的接口的实例。在这种情况下,您必须调用
MainActivity.this
以访问
MainActivity

的实例。使用内部类时,此语法变得相关

公共A类{
String str=“A”;
公共B级{
String str=“B”;
公共字符串getStr(){
返回A.this.str;//返回
}
}
}

这是一个很长的描述,但我认为你的问题与匿名类有关

当您在类中并且想要引用类的当前对象时,您可以使用
例如:

    public class MyActivity extends Activity{

    int foo;

    public Test(int _foo){

    this.foo = _foo;
    }
}
MyActivity.this
但是,当您想从其中的匿名类引用当前类对象时,应该使用
class。例如:

    public class MyActivity extends Activity{

    int foo;

    public Test(int _foo){

    this.foo = _foo;
    }
}
MyActivity.this
内部类的完整示例:

    public class Test {

        int foo = 1;

        public class InnerTest {
            public String getFoo() {
                return Test.this.foo;
            }
        }
    }

若您需要从内部类访问封闭类的实例,则需要这样声明-ClassName.this.anyClassMethod()

有关更多信息,请阅读本文

为什么我可以这样写
MainActivity.this.getContentResolve()
但是 不能像这样编写
this.getContentResolve()

因为您试图在内部类中访问外部类(MainActivity)的上下文。我们使用
activityClassName。在内部类中使用
来访问外部
activityClassName
类的上下文

当我们在内部类中访问活动上下文时,我们需要一个对活动类名的引用,以便像
MainActivity那样传递它

当我们在课堂上需要它时,我们可以简单地像
这样引用它

你应该看一看,以便很好地理解上下文实际上是什么


希望它有帮助

也许您正试图在另一个对象声明中访问它,就像在侦听器中一样。在这种情况下,这并不引用MainActivity,这就是为什么必须使用MainActivity.this来访问它。如果试图在线程内或任何回调方法内获取活动实例,则需要指定activityname.this MainActivity.this.getContentResolve()当您的非静态嵌套类需要引用其外部类的实例时,语法非常有用。
引用的更改取决于您从何处调用它。当您调用
MainActivity时。此
确保引用该活动的
实例。当您在回调、侦听器方法中或在线程上运行时尝试这样做时,情况并非如此。@Dexto在我完成键入答案之前对您发表了评论。此答案是此问题的一个重要方面。首先检查在
MainActivity
中调用此
s的位置。@IshitaSinha post edit您在编辑之前提供了正确的答案,但该答案并不满足问题的要求。@Dexto Yes,我无意中点击了按钮,因此我必须进行编辑。:(