“与”的区别是什么;这";及;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,我无意中点击了按钮,因此我必须进行编辑。:(