gpt4 book ai didi

android - 匿名类中的“this”

转载 作者:行者123 更新时间:2023-11-29 19:30:28 26 4
gpt4 key购买 nike

我注意到奇怪的事情。在匿名类中,这个引用指向外部类。例如:

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$1@34dfbb38
//this.setContentView(this.view);
}
});
task.execute();
}

如果我运行此代码 - 我可以看到 this 在数据加载完成后指向我的 Activity 。但是如果我取消注释 this.setContentView(this.view); -我遇到编译错误 - 无法解析方法 setContentView。这是因为编译器认为 this 是对 LoadGameDataTask.OnDataLoadedListener 的引用。

为什么会这样?

最佳答案

匿名类会自动分配名称 - $ 会在外部类名前加上一个序列号。net.rhyboo.com.gl_test.MainActivity$1。请注意,这不是 MainActivity 类,而是匿名类名。 $1表示第一个内部类。

要从匿名内部类访问外部类,您应该添加外部类的名称。如果您的 Activity 是 MainActivity 则使用:

MainActivity.this.setContentView(this.view);

关于android - 匿名类中的“this”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com