匿名类方法中this关键字的指向疑问及实例解析
匿名类中
this关键字的指向解析 我太懂这种困惑了!在Java的匿名内部类里,this的指向确实很容易让人绕晕,咱们把你提到的两个例子拆开来讲清楚:
1. View.OnClickListener匿名类中的this
先看你给出的点击监听器代码:
View.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ... this. // 此处this指代哪个对象? } })
这里的this直接指向的就是这个匿名的OnClickListener实例本身。因为你是在匿名类的方法内部使用this,Java默认会把它解析为当前所在类的对象——也就是你刚new出来的这个点击监听器实例。
2. WebResponseHandler匿名类中的this
先修正下你代码里的小语法问题(方便理解),来看这个例子:
// 定义接口 interface WebResponseHandler { public void onWebResponseFinished(String jsonString); } // 在某个外部类中定义变量 private WebResponseHandler onInitWebResponseHandler = new WebResponseHandler() { public void onWebResponseFinished(String jsonString) { ..... this // 此处this指代哪个对象? } };
这里你可能有个小误解!默认情况下,这个this依然是指向当前的匿名WebResponseHandler实例,而不是包含它的外部类。
那什么时候会用到外部类的实例呢?如果你想引用外部类的对象,必须显式写出外部类类名.this(比如你的外部类叫MainActivity,就写MainActivity.this)。你之所以可能觉得this指向外部类,大概率是因为调用外部类的方法/属性时,编译器允许你省略外部类的限定符——比如外部类有个updateUI()方法,你在匿名类里直接写updateUI(),其实等价于MainActivity.this.updateUI(),但单独的this还是指向匿名类本身。
一句话总结
- 在匿名内部类中,单独的
this永远指向这个匿名类自己的实例 - 如果要引用外部类的实例,必须使用
外部类类名.this的显式语法
内容的提问来源于stack exchange,提问作者Eitanos30
相关产品推荐
相关产品推荐

