[英]who is 'this' inside an anonymous class implementation?
我无法弄清楚在匿名 class方法中引用的 object 是什么。 两个例子:
View.setOnClickListener(new View.onClick() {
public void onClick(View v) {
...
this. //to which object this refers?
}
}
2.假设我有以下界面:
interface WebResponseHandler {
public void onWebResponseFinished(String jsonString)
}
在一些 class 内部,我定义了一个实现上述接口的变量:
private onInitWebResponseHandler = new VolleyHandler.WebResponseHandler() {
public void onWebResponseFinished(String jsonString) {
.....
this // to which object this refers to?
}
}
我很惊讶在第二个示例中this指的是私有 onInitWebResponseHandler 所属的 class 而不是直接指onInitWebResponseHandler
让我们测试一下:
public class Test {
private String s = "Test Class";
public void myMethod() {
System.out.println("this.s: " + this.s);
new Callable<String>() {
private String s = "Callable Class";
@Override
public String call() {
System.out.println("this.s: " + this.s);
System.out.println("Test.this.s: " + Test.this.s);
return null;
}
}.call();
}
public static void main(String[] args) {
new Test().myMethod();
}
}
它打印
this.s: Test Class
this.s: Callable Class
Test.this.s: Test Class
所以匿名 class 中的this
是匿名 class
编辑:如Angel Koh所指出的,添加了Test.this.s
关于你的第二个问题。 “这个”是指最里面的object。
结果将是
HelloWorld@6d06d69c helloWorld
1: HelloWorld$VolleyHandler@7852e922 volley
2: HelloWorld$1@4e25154f anon
3: HelloWorld$2@70dea4e anon2
对于以下代码
public class HelloWorld{
String s="helloWorld";
public static void main(String []args){
HelloWorld hw = new HelloWorld();
hw.run();
hw.onInitWebResponseHandler1.onWebResponseFinished("1");
hw.onInitWebResponseHandler2.onWebResponseFinished("2");
hw.onInitWebResponseHandler3.onWebResponseFinished("3");
}
public void run(){
System.out.println(this.toString()+" "+s);
}
interface WebResposeHandler {
public void onWebResponseFinished(String jsonString);
}
class VolleyHandler implements WebResposeHandler {
String s="volley";
public void onWebResponseFinished(String jsonString){
System.out.println("1: "+this.toString() +" "+ this.s);
}
}
WebResposeHandler onInitWebResponseHandler1 = new VolleyHandler();
WebResposeHandler onInitWebResponseHandler2 = new WebResposeHandler(){
String s="anon";
public void onWebResponseFinished(String jsonString){
System.out.println("2: "+this.toString() +" "+ this.s);
}
};
WebResposeHandler onInitWebResponseHandler3= new WebResposeHandler(){
String s="anon2";
public void onWebResponseFinished(String jsonString){
System.out.println("3: "+this.toString() +" "+ this.s);
}
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.