'this' 匿名 class
'this' within anonymous class
我注意到奇怪的 thing.In 匿名 class 这个引用指向外部 class.For 实例:
public MyView view;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
toggleFullscreen(true);
this.view=new MyView(this);
setContentView(R.layout.activity_main);
//load data
LoadGameDataTask task=new LoadGameDataTask(..loading params);
task.setListener(new LoadGameDataTask.OnDataLoadedListener() {
@Override
public void OnDataLoaded(GameData data) {
//this -reference to activity
Log.d("load","completed,this:"+this.toString());// D/load: completed,this:net.rhyboo.com.gl_test.MainActivity@34dfbb38
//this.setContentView(this.view);
}
});
task.execute();
}
如果我 运行 这段代码 - 我可以看到 this
在数据加载后指向我的 activity completed.However 如果我取消注释 this.setContentView(this.view);
- 我得到编译错误 - cannot resolve method setContentView
。这是因为编译器认为 this
是对 LoadGameDataTask.OnDataLoadedListener
的引用。
为什么会这样?
匿名 classes 会自动分配名称 - $
会在外部 class 名称前加上一个序列号。
net.rhyboo.com.gl_test.MainActivity
。请注意,这不是 MainActivity class,而是匿名 class 名称。 </code>表示第一个内class.</p>
<p>要从匿名内部 class 访问外部 class,您应该添加外部 class 的名称。如果你的 activity 是 <code>MainActivity
那么使用:
MainActivity.this.setContentView(this.view);
我注意到奇怪的 thing.In 匿名 class 这个引用指向外部 class.For 实例:
public MyView view;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
toggleFullscreen(true);
this.view=new MyView(this);
setContentView(R.layout.activity_main);
//load data
LoadGameDataTask task=new LoadGameDataTask(..loading params);
task.setListener(new LoadGameDataTask.OnDataLoadedListener() {
@Override
public void OnDataLoaded(GameData data) {
//this -reference to activity
Log.d("load","completed,this:"+this.toString());// D/load: completed,this:net.rhyboo.com.gl_test.MainActivity@34dfbb38
//this.setContentView(this.view);
}
});
task.execute();
}
如果我 运行 这段代码 - 我可以看到 this
在数据加载后指向我的 activity completed.However 如果我取消注释 this.setContentView(this.view);
- 我得到编译错误 - cannot resolve method setContentView
。这是因为编译器认为 this
是对 LoadGameDataTask.OnDataLoadedListener
的引用。
为什么会这样?
匿名 classes 会自动分配名称 - $
会在外部 class 名称前加上一个序列号。
net.rhyboo.com.gl_test.MainActivity
。请注意,这不是 MainActivity class,而是匿名 class 名称。 </code>表示第一个内class.</p>
<p>要从匿名内部 class 访问外部 class,您应该添加外部 class 的名称。如果你的 activity 是 <code>MainActivity
那么使用:
MainActivity.this.setContentView(this.view);